# 415_Add_Strings ###### tags: `leetcode` ## Problem Statement Given two non-negative integers, num1 and num2 represented as string, return the sum of num1 and num2 as a string. You must solve the problem without using any built-in library for handling large integers (such as BigInteger). You must also not convert the inputs to integers directly. - Example 1: > Input: num1 = "11", num2 = "123" Output: "134" - Example 2: > Input: num1 = "456", num2 = "77" Output: "533" - Example 3: > Input: num1 = "0", num2 = "0" Output: "0" - Constraints: > $1 \leq num1.length,\ num2.length \leq 10^4$ num1 and num2 consist of only digits. num1 and num2 don't have any leading zeros except for the zero itself. ## Solution - Just do it with string is better for the large number and it is simple. - Make sure the ```num2``` is the one with more and the same number of digits and the ```ans``` follows it. ```cpp= string ans= num2; // big one int small, plus= 0; if (num1.size()> num2.size()) { ans= num1; num1= num2; num2= ans; } ``` - Then start the calculation by backward order. See whether the digits have shift until the smaller ```num1``` runs out of digits. ```cpp= int i= ans.size()- 1, j= num1.size()- 1; for (; j> -1; i--, j--) { plus+= (num1[j]- '0')+ (num2[i]- '0'); if (plus> 9) { ans[i]= (plus- 10)+ '0'; plus= 1; } else { ans[i]= plus+ '0'; plus= 0; } } ``` - After that, the part remains for the larger numver of digits ```num2``` and see whether there are still shift left until there is no shift. ```cpp= while (plus&& i> -1) { plus+= (num2[i]- '0'); if (plus> 9) { ans[i--]= (plus- 10)+ '0'; plus= 1; } else { ans[i]= plus+ '0'; return ans; } } ``` - One more exception (eg. $1+99=100$), If there is one more new digit generated, add it. ```cpp= if (plus&& i== -1) ans.insert(0, "1"); ```