[問題] ACM10591

看板C_and_CPP作者 (五億)時間15年前 (2010/04/03 11:52), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/2 (看更多)
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 ) ( 未必需要依照此格式,文章條理清楚即可 ) 遇到的問題:無論input為何,副函式判斷完是否happy後,回傳main的值 (原本應該只可能為1或-1)都是1990006788。 希望得到的正確結果:照理說應要回傳1或-1 程式跑出來的錯誤結果:1990006788 開發平台: Codeblock 有問題的code: #include <stdio.h> #include <math.h> #include <string.h> char s_temp[100]; int power,p,sum,sum_forever,temp,L; int calculate(char* s,int L); int main() { int n,r; char s[100],s_first[100]; scanf("%d",&n); while(n--) { scanf("%s",s); strcpy(s_first,s); L=0; r=calculate(s,L); printf("%d",r); //由這個檢查出回傳值為1990006788!? if(r==1) printf("Case #%d: %s is a Happy number.\n",n+1,s_first); if(r==-1) printf("Case #%d: %s is an Unhappy number.\n",n+1,s_first); ↑以上兩個if進不去所以印不出該有的output,但程式照樣跑完。 } return 0; } int calculate(char* s,int L) { int a; for(a=0;s[a]!='\0';a++) sum=s[a]*s[a]; temp=sum; if(L==0) sum_forever=sum; power=0; for(a=0;temp>=1;a++) { power++; temp/=10; } for(a=0;power>=0;a++) { p=pow(10,power); s_temp[a]=(sum/p)%10; power--; } if(sum==1&&L==1) return 1; //這裡return 1 else if(sum==sum_forever&&L==1) return -1; //這裡return -1 //但卻return 199XX... L=1; calculate(s_temp,L); } 補充說明:副函式的概念是不斷遞迴計算且確認,直到確認算出初始數或1為止,才回傳。 -- 爾今死去儂收葬,未卜儂身何日喪。 今儂葬花人笑痴,他年葬儂知是誰? 試看春殘花漸落,便是紅顏老死時。 一朝春盡紅顏老,花落人亡兩不知。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.124.107.50

04/03 12:55, , 1F
我好久以前在本版忘了嗎裡推過的一句話再推一次:
04/03 12:55, 1F

04/03 12:56, , 2F
遞迴呼叫請乖乖的把呼叫得到的值給 return 回去
04/03 12:56, 2F

04/03 12:56, , 3F
s/忘了嗎裡/忘了哪裡/ (手殘打錯字qq)
04/03 12:56, 3F

04/04 12:17, , 4F
抱歉,我不太懂你的意思。
04/04 12:17, 4F
文章代碼(AID): #1BjhkQRJ (C_and_CPP)
討論串 (同標題文章)
以下文章回應了本文
完整討論串 (本文為第 1 之 2 篇):
問題
1
4
文章代碼(AID): #1BjhkQRJ (C_and_CPP)