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

比如一个数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//得到最高指数-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;
}






你可能感兴趣的:(c语言)