2014-01-26 117 views
0

那麼這裏是我的代碼:C:多while循環和變量

#include <stdio.h> 

int main(){ 
    int n=728,sum = 0, remainder, sump=0, d=2; 

    while(n>d){ 
    if(n%d==0){ 
     n/=d; 
     sump= sump+d; 
    } 
    else{ 
     d++; 
     } 
    } 
    sump=sump+d%10+d/10; 
    printf("%d\n",sump); 

    while(n != 0){ 
     remainder = n % 10; 
     sum = sum + remainder; 
     n = n/10; 
    } 
    printf("%d\n",sum); 
    return 0; 
} 

這裏是我所得到的,當我運行代碼:

17 
4 

的問題是,雖然油底殼是正確的,因爲728素數因子數字的總和是(2+2+2+7+1+3=17)總和的位數7284而不是17這意味着在第二個while循環中n等於13這是來自第一個循環的最後一個主要因素。

我的錯誤是什麼,在第二個循環n13而不是728

請原諒我,如果我的英語不好:S

+2

那麼這個程序應該做什麼? – 2014-01-26 17:32:25

+0

您沒有存儲'n'的值。嘗試在第一個「while」循環後顯示它。 – AntonH

+0

請正確輸入縮進。 –

回答

2

n值不再是第一while循環之後的728。在第二個while循環中,您將提取n的數字,然後嘗試添加它們,但這些數字不是7, 28
試試這個:

int temp = n; 
... 
while(temp != 0){ 
    remainder = temp % 10; 
    sum = sum + remainder; 
    temp = temp/10; 
} 
1

你清楚地修改你的第一while循環中ñ。

您可以在第二次循環之前將728重新分配給N.

1

在第一個while循環中,您正在更改n的值,這就是爲什麼您會收到「錯誤」的值。請保留n的副本或重構代碼以使用函數。

0
#include <stdio.h> 

int main(){ 
int n=728,sum = 0, remainder, sump=0, d=2; 
int tempn=n; 
while(n>d){ 
if(n%d==0){ 
    n/=d; 
    sump= sump+d; 
} 
else{ 
    d++; 
    } 
} 
sump=sump+d%10+d/10; 
printf("%d\n",sump); 
n=tempn; 
while(n != 0){ 
    remainder = n % 10; 
    sum = sum + remainder; 
    n = n/10; 
} 
printf("%d\n",sum); 
return 0; 
}