字符串相加, 大數加法

題目描述
給定兩個字符串形式的非負整數 num1 和num2 ,計算它們的和。

注意:

num1 和num2 的長度都小於 5100.
num1 和num2 都只包含數字 0-9.
num1 和num2 都不包含任何前導零。
你不能使用任何內建 BigInteger 庫, 也不能直接將輸入的字符串轉換爲整數形式。

來源:力扣
鏈接:字符串相加

思路:

  1. 首先根據字符串 num1 和 num2的長度進行補位, 在長度較短的字符串前插字符’0’直至長度相等, 這一步操作可以方便我們利用for循環從字符串末尾逐位向前相加
  2. 設置進位 step 初始值爲 0, 用 string ret接收每一次結果, 第一步已經通過補齊操作使得num1, num2長度相等, 因此給利用 resize 給 ret 開好空間 ret.resize(num1.size());
    即 ret[i] = (num1[i] - ‘0’) + (num2[i] - ‘0’) + step + '0;
    若該字符 大於 '9’表示下次相加需要進位, 修改 step 爲 1
    注意如果不大於字符 ‘9’, 要將step 置爲 0(防止之前因爲進位將step修改爲1, 因此如果不置0, 本來本次相加不需要加1, 但由於上次修改了step爲1導致本次相加多加了1)
  3. 最後要注意, 當 ret[0] = (num1[0] - ‘0’) + (num2[0] - ‘0’) + step + '0 的結果大於字符 '9’時, 說明此時需要進位, 但for循環記錄本次 ret[0]的結果, 將step置爲1之後結束循環, 此時返回 ret就丟失了這個記爲值, 因此 for循環結束 再加一次判斷
    即如果 step == 1的, 給 ret前插字符 ‘1’

代碼示例:

class Solution {
public:
	string addStrings(string num1, string num2) {
		//根據num1和num2的長度進行補位操作
		int len1 = num1.size();
		int len2 = num2.size();
		int count = abs(len1 - len2);

		if (len1 > len2)
			num2.insert(0, count, '0');
		else if (len1 < len2)
			num1.insert(0, count, '0');

		int len = num1.size();
		string ret;//作返回值
		ret.resize(len);//開好空間,方便下標訪問對應值
		int step = 0;//表示進位
		for (int i = len - 1; i >= 0; --i)
		{
			ret[i] = (num1[i] - '0') + (num2[i] - '0') + step + '0';

			if (ret[i] > '9')//大於字符'9', 即需要進位
			{
				ret[i] -= 10;
				step = 1;
			}
			else
				step = 0;
		}
		if (step == 1)
			ret.insert(0, 1, '1');
		return ret;
	}
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章