第四周 整数分解
将一个整数分解,比如 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 }
小技巧也很重要。