1.倒轉數字=餘數X10 2.重複直到N整數除以10的商數=0 2.1.每重複一次倒轉數字=餘數X10+餘數 題目來源:Reverse Integer 問題: 給一個數字,將其反轉 例子: 例如: x = 123, 則回傳 321 例如: x = -123, 則回傳 -321 想法: 這題目作法我想到有兩種: 第一種作法就是使用 字串反轉 方式。但是,使用字串反轉會遇到一個 正/負 號的問題。假設數字是負數的,這個反轉後的負號就會跑到最後面(例如:-123 會變成 321-)。因此我們必須把正負號先取出來,取出之後再將 數字轉成字串(string) 進行反轉,最後再將正負號放回去。 第二個作法也是先把 正/負 號取出,再用 mod 10(除以 10 取餘數) 及 乘法 把數字作反轉。相較於第一種作法,這種方式就不用進行 數字 -> 文字 -> (處理文字反轉) -> 數字 的步驟。不過因為題目沒有限制這數字對多有幾位數,所以我是採用 無限回圈 + 一個 終止條件 來進行反轉。 例如:輸入數字為 5678, 則我每做一次 mod 10, 我就可以得到最後一位數,每做一次 除以 10 輸入的數字就會少一位數。因此我可這樣做: 先把 result 設成 0 5678 mod 10 -> 得到 8 5678 / 10 -> 得到 567 把 result * 10 + 8 得到 8 設給 result( 0*10+8 這時 result = 8) (反覆上面的步驟直到 輸入的數字為 0 ) 567 mod 10 得到 7 567 / 10 得到 56 把 result * 10 + 7 設給 result ( 8*10+7 = 87 ) (反覆上面的步驟直到 輸入的數字為 0 ) 56 mod 10 得到 6 56 / 10 得到 5 把 result * 10 + 6 設給 result ( 87*10+6 =876) .....到這裡發現規則了嗎? 如果還沒發現,下面的虛擬碼應該會讓你恍然大悟 虛擬碼 檢視原始檔複製到剪貼簿列印關於 //數字操作 取出正負號先將其保留 宣高一個回傳結果 result 並設成 0 倒轉數字=N整數/10的餘數 每次逐一重複計算時,倒轉數字=倒轉數字X10+餘數 宣告一個暫存變數 tmp 並將 要反轉的數字設給他 無限迴圈 { 將 temp mod 10 得到的值設給 digit // 此一步驟目的在取得個位數 將 result * 10 + digit 設給 result // 此一步驟是再將結果的右邊家個個位數 將 temp / 10 並設給 temp // 此一步驟目的在消除個位數 若 temp 為 0 { 終止回圈並跳出 } } 將 正/負 號放回 result 回傳 result 檢視原始檔複製到剪貼簿列印關於 //字串操作 取出正負號先將其保留 將輸入的數字轉成字串 將字串反轉 將反轉的字串轉回數字 將正負號放回數字中 回傳結果
a025: 數字倒轉關鍵字: while 迴圈 測資點 : 5 | 時間限制 : 1000 ms | 記憶體限制 : 32000 KB 通過 : 1808 次 / 1710 人 | 送出 : 2743 次 / 1801 人 | 通過比率 : 95% 題目加入時間 : 2011-08-15 15:27 內容: 简体中文 給你一個正整數,請你將所有數字倒轉之後輸出,例如給你12345,則輸出54321。 輸入說明: 輸入一個正整數 N。 輸出說明: 將 N 的所有數字倒轉之後輸出,開頭的 0 請不要輸出。 範例輸入:help 12345 1997 範例輸出 : 54321 7991 提示 : 可以用另一個變數 M 去記錄倒轉之後的數字是多少,觀察下面 N、M 兩個變數的變化: N -> 12345 -> 1234 -> 123 -> 12 -> 1 -> 0 M -> 0 -> 5 -> 54 -> 543 -> 5432 -> 54321 出處 : while 迴圈 (管理員:sagit)