[問題] ACM10591
( *[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
04/03 12:56, 2F
→
04/03 12:56, , 3F
04/03 12:56, 3F
→
04/04 12:17, , 4F
04/04 12:17, 4F
討論串 (同標題文章)