Java習題訓練1——大數加法
阿新 • • 發佈:2020-12-22
技術標籤:java
加法
做過很多關於計算的程式設計題,覺得這題比較有意思。
故記錄一下。
題目描述
以字串的形式讀入兩個數字,編寫一個函式計算它們的和,以字串形式返回。
(字串長度不大於100000,保證字串僅由’0’~'9’這10種字元組成)。
這是牛客上一道中等題。這題的主要難度其實就是進位,以及處理不同數位的加減法。
大題絲路如下:
- 確定兩個輸入的位數。
- 設定相關變數。進位應該設定為 0 ,但是忘了 0 的表示符號是什麼,所以用’0’-'0’表示。進位表示為’9’,當加起來大於9,則說明需要進位了。
- 然後就是遍歷兩個字串,加起來,儲存char值。
- 如果發現大於9,進位就要進1。進1是把進位改成 ‘1’-‘0’,而不是’1’。(菜雞博主一開始老出錯才發現是這個。)
- 最後,最高位的進位需要單獨判斷,2個6位數,只會迴圈6次,但可能得到7位數。故需要單獨判斷最高位是否為1.
class Solution { /** * 程式碼中的類名、方法名、引數名已經指定,請勿修改,直接返回方法規定的值即可 * 計算兩個數之和 * @param s string字串 表示第一個整數 * @param t string字串 表示第二個整數 * @return string字串 */ public String solve (String s, String t) { int lengS = s.length()-1; int lengt = t.length()-1; char ten = '9'; char jinwei = '0'-'0'; char temp; StringBuffer sb = new StringBuffer(); while(lengt>=0 || lengS >=0){ temp = '0'; if(lengS >=0){ temp += s.charAt(lengS) - '0'; lengS--; } if(lengt>=0){ temp += t.charAt(lengt) - '0'; lengt--; } temp += jinwei; if(temp > ten){ jinwei = '1'-'0'; if (temp == '9' + '1' -'0') { temp = '0'; } else temp = (char) (temp - ('9' - '0') - jinwei); } else{ jinwei = '0' - '0'; } sb.insert(0,temp); } if(jinwei != '0'-'0') sb.insert(0, '1'); return sb.toString(); } }
課餘時間比較倉促,謹記錄一種的簡單的解法。