#1073: 為什麼會OLE?

Unknown User

c034. 00424 - Integer Inquiry -- UVa424 | From: [61.31.142.214] | 發表日期 : 2008-12-18 20:13

他在第二行的時候多輸出了一行..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;
}

 
#1074: Re:為什麼會OLE?

Unknown User

c034. 00424 - Integer Inquiry -- UVa424 | From: [61.31.142.214] | 發表日期 : 2008-12-18 20:34

那個...
後來我把if(a[0]=='0'&&a[1]==0)改成if(cin.eof())後
就AC了...
但是這樣就沒有用到以0做結尾了ˊˇˋ""
 
#1075: Re:為什麼會OLE?


snail (蝸牛)

學校 : 新北市立板橋高級中學
編號 : 2021
來源 : [101.137.60.28]
最後登入時間 :
2024-11-10 16:35:50
c034. 00424 - Integer Inquiry -- UVa424 | From: [218.211.230.114] | 發表日期 : 2008-12-19 04:49

你的程式有兩個 while (1),break 敘述只能跳出裡面的那一個,外面的那一個會繼續執行。當你改成用 cin.eof() 來判斷時,它把最後的 0 也當做一個數字加進去了,還好結果不變。

其實這個題目只有一組測試資料,所以外面的那個 while (1) 是多餘的,你原來的程式只要把外層的 while (1) 拿掉就可以了。

 
ZeroJudge Forum