第四周 整数分解

将一个整数分解,比如 345985,分解为:3 4 5 9 8 5.

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5   int x;
 6   scanf("%d", &x);
 7 
 8   do {
 9     int d = x%10;
10     x /= 10;
11     printf("%d ", d);
12   } while ( x>0 );
13 
14   return 0;
15 }

这样结果是把345985,分解为:5 8  9 5 4 3 .

这样的问题是最后一位也有空格,这不符合我们的习惯。可以分析一下,最后一位时,x必然小于10,所以可以将空格分开来输出,在输出空格的前,先判断下x。

将第11行改为:printf("%d", d);后面加条:if(x>0) printf(" "); 为什么是0,不是9?是因为先除了10,应该把第10行放到11行后面,就不会这样了。

怎么在逆过来呢?

思路一:先将345985逆序;

思路二:可以用345985/100000->3,继续下去可以得到 4,5,9,8,5.

那么怎么得到100000呢?

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5   int d, t, x;
 6   int msk = 1;
 7   scanf("%d", &x);
 8   t = x;      //先保存x变量
 9 
10   //找出x的位数
11   while(t>9) {    
12     t = t / 10;
13     msk = msk * 10;
14   }
15 
16   while ( msk>0) {
17     d = x / msk;
18     printf("%d", d);
19     if ( msk>9 )
20       printf(" ");
21     x = x % msk;
22     msk = msk / 10;
23   }
24   return 0;
25 }

小技巧也很重要。

 

posted @ 2018-02-18 17:50  左揽雀尾007  阅读(252)  评论(0编辑  收藏  举报