ping-code

导航

C++ 不用现成的类库 实现两个非负整数的字符串的和

给定两个非负整数的字符串num1 和num2 ,返回num1 与num2的和

Note:

  1.  num1 和 num2 长度都小于5100.
  2.  num1 和num2 只包含0-9的数字.
  3. num1 和num2 开头不为0.
  4. 不能用现成的类库直接将输入的字符串转换成整数

思路:从低位开始遍历相加,和≥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 }

 

posted on 2023-07-20 23:23  一只小瓶子  阅读(29)  评论(0编辑  收藏  举报