他在第二行的時候多輸出了一行..OTZ
可否幫看一下!?
#include ......(略)
using namespace std;
int main()
{
while(1)
{
if(cin.eof())
break;
char a1[101],s[105];
cin >> a1; //輸入第一筆資料
for(int i=0;i<strlen(a1);i++)
s[i]=(int)a1[strlen(a1)-1-i];
for(int i=strlen(a1);i<105;i++)
s[i]='0';
while(1)
{
char a[101];
cin >> a;
if(a[0]=='0'&&a[1]=='\0')
break;
for(int i=0;i<strlen(a);i++)
{
s[i]+=(int)a[strlen(a)-1-i]-48;
if(s[i]>57)
{
s[i]-=10;
s[i+1]++;
}
}
for(int i=strlen(a);i<105;i++) //檢查未檢查到的部份
{
if(s[i]>57)
{
s[i]-=10;
s[i+1]++;
}
}
}
for(int i=104;i>0;i--)
{
if(s[i]!='0')
break;
s[i]='\0';
}
for(int i=strlen(s)-1;i>=0;i--)
cout << s[i];
cout << '\n';
}
return 0;
}
你的程式有兩個 while (1),break 敘述只能跳出裡面的那一個,外面的那一個會繼續執行。當你改成用 cin.eof() 來判斷時,它把最後的 0 也當做一個數字加進去了,還好結果不變。
其實這個題目只有一組測試資料,所以外面的那個 while (1) 是多餘的,你原來的程式只要把外層的 while (1) 拿掉就可以了。