欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

正序分解整数

程序员文章站 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;
 }