正序分解整數

 #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;
 } 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章