[問題] 數字反轉相加問題

看板C_and_CPP (C/C++)作者 (職業洗的)時間16年前 (2009/12/21 18:28), 編輯推噓1(107)
留言8則, 2人參與, 最新討論串1/1
( *[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

12/21 18:37, , 1F
因為最後結果8813200023188超過int範圍
12/21 18:37, 1F

12/21 20:23, , 2F
rev(89)的結果是17而不是98…
12/21 20:23, 2F

12/21 20:25, , 3F
number整數位數=(int)log10(number)+1
12/21 20:25, 3F

12/21 20:26, , 4F
(int)log10(89)+1=2,2就是兩位數。
12/21 20:26, 4F

12/21 20:28, , 5F
試看看把rev的do-while改成for迴圈…
12/21 20:28, 5F

12/21 20:30, , 6F
for(int i=0; i < 整數位數; i++)逐一取出每一位數再計算
12/21 20:30, 6F

12/21 20:48, , 7F
log10標頭檔:math.h
12/21 20:48, 7F

12/21 21:06, , 8F
…數值加到最後還是爆掉了。= =|||
12/21 21:06, 8F
文章代碼(AID): #1BBqtEY0 (C_and_CPP)
文章代碼(AID): #1BBqtEY0 (C_and_CPP)