正序分解整数
程序员文章站
2022-03-22 16:25:32
...
#include<stdio.h>
/*int main()
{
int x;
scanf("%d",&x);
//x=13425;
int t=0;
do{
int d=x%10;
t=t*10+d;
x/=10;
}while(x>0);
printf("t=%d\n",t);
x=t;
do{
int d=x%10;
printf("%d",d);
if(x>=10){
printf(" ");
}
x/=10;
} while(x>0);
return 0;
} //先逆序再逆序的情况只适合末尾不是0的情况 */
/* 13425/10000-->1 // 要输出的数
13425%10000-->3425 // 余数
10000/10-->1000
3425/1000-->3
3425%1000-->425
1000/10-->100
425/100-->4
425%100-->25
100/10-->10
25/10-->2
25%10-->5
10/10-->1
5/1-->5
5%1-->0
1/10-->0*/
//当将整数分解完之后,最后得到的余数为0。可以作为循环结束的条件。
//但是万一这个整数一开始对10000的余数就为0了呢?所以采用余数是否为0的方法判断循环结束是不靠谱的。但是我们观察到不管怎样,直到结束之时,mask在其中都不会为0。因此mask可以作为一个很好的判断标准。
int main()
{
int x;
scanf("%d",&x);
int temp=x;
int mask=1;
while(temp>=10){
mask*=10;
temp/=10;
}
//printf("%d\n",mask);
do{
int d=x/mask;
printf("%d",d);
if(mask>=10){
printf(" ");
}
x%=mask;
mask/=10;
//printf("x=%d,mask=%d,d=%d\n",x,mask,d);
}while(mask>0);
return 0;
}