為了解開這題,並且不使用將整數轉換成字串這個方法,需要用數學的方法來反轉數字的一部分或全部。這有兩種常見的解法,但其中一個雖然直觀,但有潛在的溢位風險(處理大數字時,可能會超出int類型的最大值,導致溢位),所以我選擇了另一個更通用、更保險的解法。
解法:反轉一半數字,這個方法不需要反轉整個數字,只需要反轉它的一半。首先,先做特殊情況判斷,如果x小於0,直接回傳false;如果x的個位數是0(且x本身不為0),也直接回傳false,例如:10, 20, 30。接著,是反轉的過程,要建立一個變數reversed,初始值為0,再來,透過一個while迴圈,每次將x的個位數取出,加到reversed的末尾,當reversed大於或等於x時,表示已經處理一半或更多,此時迴圈結束。在迴圈結束後,要判斷結果,有兩種方法可以判斷是否為迴文數,1.如果是偶數位數,例如1221,x和reversed應該要相等,迴圈結束時,x = 12, reversed = 12;2.如果是奇數位數的數字,例如121,x和reversed的值會相差一位,迴圈結束時,x = 1, reversed = 12,這時需要將reversed除以10,去掉中間位數,在和x比較,也就是x == reversed / 10。
這個方法的優點是避免了整數溢位,如果反轉整個數字的話,就有可能發生溢位(也就是方法二)。