统计一个数字的位数并顺序和逆序输出这个数

比如一个数1234,先统计它是一个四位数,然后顺序输出是1 2 3 4,逆序输出是4 3 2 1,用程序实现这个功能.
1.统计位数
 如果给我们一个数,我们很容易知道是几位数,长的数字我们会一个一个数,数到最后一个数,就得到它是几位数了。对于计算机而言,也可以这样获得位数,只不过数完一个数要把它丢弃。直到这个数为0时,就得到它的位数了。

int Getfigures(int n)  //得到一个数有几位
{
 int count=0;  //定义一个计数器
 do                  //用do...while是为了判断0
 {
  count++;  //计数加一
  n=n/10;
 }while(n!=0);  //while后面的分号不能忘
 return count;
}

2.逆序输出
1234逆序输出 4 3 2 1,我们先输出4,然后丢弃4,剩下123,再输出3,丢弃3,这个过程其实就是先得到个位数,然后丢弃个位数,再从新的数里面得到新的个位数,再丢弃新的个位数,直到这个数变成0,得到个位很简单,只需要模上10就可以,丢弃个位也很简单,只需要整除十就可以。

void PrintReverse(int n)  //逆序输出
{
 if(n<0) //对负数判断
 {
  n=-n;
   //printf("- ");  //输出一次负号
 }
 do
 {
  printf("%d ",n); //对十取模,得到最后一位
  n=n/10;     //除十丢弃最后一位
 }while(n!=0); //直到n为0的时候,这个数全部遍历完
 printf("\n");
}

3.顺序输出
1234输出1 2 3 4,和逆序输出相反,是先得到最高位,在丢弃最高位,但是得到最高位和丢弃最高位要稍微麻烦一点,比如1234得到1,那就需要1234除以1000,十的三次方,82得到8就需要除以10,十的一次方,所以可以看出得到最高位的方法就是先得到它的位数,然后用这个数除以10的 位数减一 次方,丢弃这个最高位就是对10的位数减一次方取模, 我们可以通过power函数,求出10的几次方,但是这个函数的开销非常大,不建议对整数使用,我们可以用循环求出要被除和取余的数。
void PrintOrderf(int n) //顺序输出数字,非常重要
{
 if(n<0)
 {
  n=-n;
  printf("- ");
 }

 int figure=Getfigures(n); //接收位数

    //int b=pow(10,n-1); //这个过程用循环实现
 int power=1; 
 for(int i=0;i<figure-1;i++)//得到最高指数-1
 {
  power *= 10; 
 }

 do
 {
  printf("%d ",n/power);//得到第一位
  n %= power ; //丢弃第一位
  power /= 10; //更新最大值
 }while(n!=0);

 printf("\n");
}

然后就可以对这个程序进行测试,要多写一些测试用例,防止有情况没有考虑到。
int main()
{
 printf("%d\n",Getfigures(0));
 printf("%d\n",Getfigures(10));
 printf("%d\n",Getfigures(345));
 printf("%d\n",Getfigures(123456789));
 printf("%d\n",Getfigures(-123456789));
 PrintReverse(0);
 PrintReverse(148);
 PrintReverse(123456);
 PrintReverse(-123456);
 PrintOrderf(0);
 PrintOrderf(1234);
 PrintOrderf(-1234);
 return 0;
}






  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值