整数的逆序与顺序输出

题目:给一个整数,要求: (1)求出它是几位数; (2)分别输出每一位数字; (3)按逆序输出各位数字;

假设n为1234,用它来举例怎样舍弃或者得到高、低位。

<逆序输出>

得最低位:low=n%10             
1234%10=123...4                
123%10=12...3               
12%10=1...2                 
1%10=0...1
得低位后丢低位     
丢最低位:n/=10   
1234/10=123    
123/10=12  
12/10=1 
1/10=0
这个方法不仅可以逆序输出各个位,还可以算n中有几个1,几个2等问题。
只需将每位数字与1或者2等数字相比较并用计数器加一即可。 


<顺序输出>    

得最高位:n/=power         
1234/1000=1   n/1000    
234/100=2     n/100        
34/10=3       n/10            
4/1=4         n/1               
得高位后丢高位
丢最高位:high=n/1000
1234%1000=1...234    high=n/1000
234%100=2...34      high=n/100
34%10=3...4         high=n/10
4%1=4...0           high=n/1
以上这些规律可以选择合适的循环来实现


这个程序编写如下:

[cpp] view plain copy

  1. #include  
  2.   
  3. int GetFigures(int n)//判断这个数是几位数  
  4. {  
  5.     int count = 0;  
  6.     do//用do_while防止输入的数字为0,do_while和while只有0、1区别  
  7.     {  
  8.         count++;  
  9.         n /= 10;  
  10.     } while (n != 0);  
  11.     return count;  
  12. }  
  13.   
  14. void PrintOrder(int n)//顺序输出各个位,从高位依次向低位输出。  
  15. {  
  16.     if (n < 0)//考虑到负数的情况  
  17.     {  
  18.         printf("-");  
  19.         n = -n;  
  20.     }  
  21.     int num;  
  22.     int power = 1;  
  23.     num = GetFigures(n);  
  24.     for (int i = 0; i < num - 1; i++)  
  25.     {  
  26.         power *= 10;//  10-->100-->1000  
  27.     }  
  28.     do  
  29.     {  
  30.         int high = n / power;//得最高位  
  31.         printf("%d ", high);  
  32.         n %= power;//丢最高位  
  33.         power /= 10;//1000-->100--10-->1  
  34.     } while (n != 0);  
  35.     printf("\n");  
  36. }  
  37.   
  38. void PrintReverse(int n)//逆序输出各个位,从低位向高位依次输出。  
  39. {  
  40.     if (n < 0)//考虑到负数的情况  
  41.     {  
  42.         printf("-");  
  43.         n = -n;  
  44.     }  
  45.     do  
  46.     {  
  47.         int low = n % 10;//得最低位  
  48.         printf("%d ", low);  
  49.         n /= 10;//丢最低位  
  50.     } while (n != 0);  
  51.     printf("\n");  
  52. }  
  53.   
  54. int main()  
  55. {  
  56.     printf("%d\n", GetFigures(135));  
  57.     PrintOrder(135);  
  58.     PrintReverse(135);  
  59.     printf("%d\n", GetFigures(0));  
  60.     PrintOrder(0);  
  61.     PrintReverse(0);  
  62.     printf("%d\n", GetFigures(-135));  
  63.     PrintOrder(-135);  
  64.     PrintReverse(-135);   
  65.     return 0;  
  66. }  

运行结果:

整数的逆序与顺序输出_第1张图片

上面程序中的各个位按顺序输出,还有另一个规律:
例如1234 即n%pow(10,figures-1)/10,其中指数figures控制,用循环来实现
1234/1000=1  1%10=0...1
1234/100=12  12%10=1...2
1234/10=123  123%10=12...3
1234/1=1234  1234%10=123...4

代码实现如下:

[cpp] view plain copy

  1. void PrintOrder(int n)//顺序输出各个位  
  2. {  
  3.     if (n < 0)  
  4.     {  
  5.         printf("-");  
  6.         n = -n;  
  7.     }  
  8.     int high, power;  
  9.     int figures = GetFigures(n);//令figures作为10的指数  
  10.     while (figures != 0)  
  11.     {  
  12.         power = pow(10, (figures - 1));//先除以10的power-1次方,这里需要加上头文件 #include  
  13.         high = n / power % 10;  
  14.         figures--;  
  15.         printf("%d", high);  
  16.     }  
  17.     printf("\n");  
  18. }  

你可能感兴趣的:(c基础)