作者keler897 (職業洗的)
看板C_and_CPP
標題[問題] 數字反轉相加問題
時間Mon Dec 21 18:28:27 2009
( *[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