看板 C_and_CPP 關於我們 聯絡資訊
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題: 數字89反轉相加不出來 其他數字可以 希望得到的正確結果:89反轉相加 程式跑出來的錯誤結果:跑不出來ˊˋ 開發平台: Dev-C++ 有問題的code: #include<stdio.h> #include<stdlib.h> int rev(int x); int sum(int x); int main() { int x=89; printf("%d",sum(x)); system("pause"); return 0; } int rev(int x) { int y,z=0; do{ z = z * 10; y = x % 10; x = x / 10; z += y; }while(x > 0); return z; } int sum(int x) { int y; do { x+=rev(x); y=rev(x); }while(x!=y); return x; } 補充說明:函式rev把數字做反轉 函式sum把原來的數字跟反轉後的數字做相加 直到數字跟反轉後的數字相同後停止 我試過其他數字都可以 89就不行 可以幫我看看嗎m(_ _)m感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.117.195.228
AstralBrain:因為最後結果8813200023188超過int範圍 12/21 18:37
johnhmj:rev(89)的結果是17而不是98… 12/21 20:23
johnhmj:number整數位數=(int)log10(number)+1 12/21 20:25
johnhmj:(int)log10(89)+1=2,2就是兩位數。 12/21 20:26
johnhmj:試看看把rev的do-while改成for迴圈… 12/21 20:28
johnhmj:for(int i=0; i < 整數位數; i++)逐一取出每一位數再計算 12/21 20:30
johnhmj:log10標頭檔:math.h 12/21 20:48
johnhmj:…數值加到最後還是爆掉了。= =||| 12/21 21:06