求一个数字的位数,输出正序反序

这篇博客介绍了如何求一个正整数的位数,并正序和倒序输出每一位数字。文中包含测试案例及其对应的算法实现,强调算法在处理负数时的输出规范。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给出一个正整数,要求1.求该数的位数;2.正序输出每一位数字;3.倒序输出每一位数字。

#include<stdio.h>
#include<math.h>
//对正整数进行计数操作,统计时采用统计一位,丢弃最低位的计数方式
int Count(int n)
{
 int count=0;
 while(n)
 {
  n=n/10;
  count++;
 }
 return count;
}
//对正整数进行正序打印,通过调用计数函数实现,采用打印最高位,舍弃最高位的打印方式
void Print(int n)
{
 if(n==0) printf("0");
 while(n)
 {
  int tmp=pow((double)10,Count(n)-1);
  printf("%-3d",n/tmp);
  n=n%tmp;
 }
  printf("\n");
}
//对正整数进行反向输出,先打印对低位(取余),再舍弃最低位(除)
void Reverse_order(int n)
{
 if(n==0) printf("0");
 while(n)
 {
  printf("%-3d",n%10);
  n=n/10;
 }
  printf("\n");
}
int main()
{
 int n;
 printf("请输入一个正整数:");
 scanf("%d",&n);
 /*
 //如果对输入数据有限制,则采用,此为对不大于五位数进行检查
 if(n<0 || n>99999)
 {
  printf("请输入一个不多于5位的正整数:");
  scanf("%d",&n);//输入一个正整数
 }
 */
 printf("%d是一个%d位数\n",n,Count(n));
 Print(n);
 printf("\n");
 Reverse_order(n);
 return 0;
}

对此程序进行测试

int main()
{
 printf("%d\n",Count(12345677));//测试用例
 printf("%d\n",Count(123));
 printf("%d\n",Count(0));
 printf("%d\n",Count(-1234567));
 Reverse_order(12345);
 Reverse_order(123456768);
  Reverse_order(0);
 Reverse_order(-12345);
 Printf(1234567);
 Printf(0);
 Printf(-1234567);
 return 0;
}

测试结果:
在这里插入图片描述
对正序和逆序的输出,要求算法只能输出一个负号,其更改代码如下所示:

void Print(int n)
{
 if(n<0){printf("-"); n=-n;}
 if(n==0) printf("0");
 while(n)
 {
  int tmp=pow((double)10,Count(n)-1);
  printf("%-3d",n/tmp);
  n=n%tmp;
 }
  printf("\n");
}
//对正整数进行反向输出,先打印对低位(取余),再舍弃最低位(除)
void Reverse_order(int n)
{
 if(n<0){printf("-"); n=-n;}
 else if(n==0) printf("0");
 while(n)
 {
  printf("%-3d",n%10);
  n=n/10;
 }
  printf("\n");
}
int main()
{
 int n;

测试结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值