這個問題其實很簡單,就是把兩個小於十位的非負整數相加,求相加的過程總共進位幾次 例如 123 + 456,完全沒有進位到,因為3+6<10, 2+5<10, 1+4<10 123+127,進位一次,因為3+7=10, 2+2+ 1 <10, 1+1<10 問題簡單歸簡單,但我遞交 UVa online 第11次才Accepted ,前面得到wrong answer 9次、compilation error 1次,debug的全部時間加起來大約有兩、三小時吧,坦白說真的有點挫敗和無奈 起初我以為是輸出格式錯誤,有的問題是一次給完所有input,計算完一次把所有答案印出來;有的則是一筆一筆給,output也就一筆一筆印;有的會要求用一個空白行區隔、有的不會 但我確認這次是一筆一筆給、然後一筆一筆印 所以 應該是邏輯錯誤沒錯 ?系統判斷出錯的機率極低,我這樣假設 於是我就試著丟一些input進去看能不能找到問題出在哪,但看不出來...,丟進去的資料給的結果都正確 我又想是不是不滿足input格式?小於10位的unsigned integer,在大部分情況下,用long long是足夠的,int也可以 我google找了別人的程式碼,丟進系統結果accepted,然後看它運作時的輸入、輸出格式,跟我的一樣 實在受不了,我就看了別人的程式碼跟我的到底有什麼不同,嗯...,判斷的過程比我的簡潔明瞭許多,然後我注意到第24行while loop那個判斷要不要繼續做下去的條件,他是打||,我打&&,我恍然大悟!突然想到我的程式會跑出錯誤結果的例子 977+23,7+3=10, 7+2+ 1 =10, 9+ 1 =10,總共進位3次 但我的程式對這個例子的判斷結果會是2次!因為最後9+1這次沒判斷到,我以為當兩個整數不同位的時候,判斷到小的數字的位數就足夠了,以這個例子而言較小的數字是23,我以為判斷完兩位的相加就好了... 這次經驗,老實說一樣是犯了之前常犯的問題: 演算法不夠清楚或確認其正確性之前就開始寫程式 ,這個問題確實夠簡單,解法大部分人想一下大概就差不多,然後開始寫,大部分情況可能第一次或前幾次就Accepted,但這次剛好我想岔了一些,結果就是debug地獄 ...