C++ 不用现成的类库 实现两个非负整数的字符串的和
给定两个非负整数的字符串num1 和num2 ,返回num1 与num2的和
Note:
- num1 和 num2 长度都小于5100.
- num1 和num2 只包含0-9的数字.
- num1 和num2 开头不为0.
- 不能用现成的类库直接将输入的字符串转换成整数
思路:从低位开始遍历相加,和≥10标记add_val=1,<10标记add_val=0,在下一位相加的时候加上这个数。我是每相加得到一个数,就在string前面insert一个数
注意:别忘了最后一位相加的时候如果和≥10得再最前面补个1
1 //两个非负整数字符串求和 2 string addStrings(string num1, string num2) 3 { 4 //合法字符[0,9];检测非法字符,开头不为0的非空字符串 5 if (num1.size() <= 0 || num2.size() <= 0 || num1[0] == '0' || num2[0] == '0') 6 return "error num string"; 7 8 string dst = ""; 9 10 int add_val = 0;//0为不进1,1为向前进1 11 int p1 = num1.size() - 1; 12 int p2 = num2.size() - 1; 13 while(p1 >= 0|| p2 >= 0)//个位数开始相加 14 { 15 //合法字符[0,9];检测非法字符 16 if ((p1 >= 0 && (num1[p1] < '0' || num1[p1] > '9')) || 17 (p2 >= 0 && (num2[p2] < '0' || num2[p2] > '9'))) 18 return "error num string"; 19 20 int val1 = p1 >= 0 ? num1[p1] - '0' : 0; 21 int val2 = p2 >= 0 ? num2[p2] - '0' : 0; 22 int sum_val = val1 + val2 + add_val; 23 if (sum_val > 9) 24 { 25 add_val = 1; 26 sum_val -= 10; 27 } 28 else 29 { 30 add_val = 0; 31 } 32 dst.insert(dst.begin(), sum_val + '0'); 33 34 p1--; 35 p2--; 36 } 37 if (add_val > 0)//最后一位是否进1 38 { 39 dst.insert(dst.begin(), '1'); 40 } 41 42 return dst; 43 }