79.字符串相加

题号415:

给定两个字符串形式的非负整数和,计算它们的和。

注意:

num1 和num2 的长度都小于 5100.

num1 和num2 都只包含数字 0-9.

num1 和num2 都不包含任何前导零。

你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。

解题思路:

从右往左逐位相加,用一个01变量处理进位;

没有遍历完的字符串需要再加上,同样注意进位处理;

最后还需要一次进位处理(如"999"+"1")。

代码实现:

class Solution {

public:

string addStrings(string num1, string num2) {

string s="";

int i=num1.length()-1,j=num2.length()-1,flag=0; // flag用于进位标记

while(i>=0 && j>=0){

int tmp=(num1[i]-'0')+(num2[j]-'0')+flag;

if(tmp>9){ // 若两数之和大于等于10,需要进位处理

flag=1;

tmp-=10;

}else{

flag=0;

}

s=to_string(tmp)+s;

i--;

j--;

}

if(i>=0){ // 字符串num1还没遍历结束

while(i>=0){

int tmp=(num1[i]-'0')+flag; // 同样需要处理进位

if(tmp>9){

flag=1;

tmp-=10;

}else{

flag=0;

}

s=to_string(tmp)+s;

i--;

}

}else if(j>=0){// 字符串num2还没遍历结束

while(j>=0){

int tmp=(num2[j]-'0')+flag; // 同样需要处理进位

if(tmp>9){

flag=1;

tmp-=10;

}else{

flag=0;

}

s=to_string(tmp)+s;

j--;

}

}

if(flag)

s="1"+s; // 处理最后的进位

return s;

}

};

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180615G0E30H00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券