1. 程式人生 > 其它 >Java習題訓練1——大數加法

Java習題訓練1——大數加法

技術標籤:java

加法

做過很多關於計算的程式設計題,覺得這題比較有意思。
故記錄一下。
題目描述
以字串的形式讀入兩個數字,編寫一個函式計算它們的和,以字串形式返回。
(字串長度不大於100000,保證字串僅由’0’~'9’這10種字元組成)。

這是牛客上一道中等題。這題的主要難度其實就是進位,以及處理不同數位的加減法。
大題絲路如下:

  1. 確定兩個輸入的位數。
  2. 設定相關變數。進位應該設定為 0 ,但是忘了 0 的表示符號是什麼,所以用’0’-'0’表示。進位表示為’9’,當加起來大於9,則說明需要進位了。
  3. 然後就是遍歷兩個字串,加起來,儲存char值。
  4. 如果發現大於9,進位就要進1。進1是把進位改成 ‘1’-‘0’,而不是’1’。(菜雞博主一開始老出錯才發現是這個。)
  5. 最後,最高位的進位需要單獨判斷,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();
    }
}

課餘時間比較倉促,謹記錄一種的簡單的解法。