大数加法
描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
数据范围:s.length,t.length \le 100000s.length,t.length≤100000,字符串仅由’0’~‘9’构成
要求:时间复杂度 O(n)O(n)
#include <iostream>
using namespace std;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// write code here
int temp = 0;//用于保存每次每一位的计算结果
int carry = 0;//用于进位
int Slen = s.size() - 1;
int Tlen = t.size() - 1;//先计算各个字符串的长度
if (Slen < Tlen) swap(s, t), swap(Slen, Tlen);//长度大的是加数 小的是被加数
int num = Slen - Tlen;
while (num > 0) { //给小的补0 因为思路是每一位进行计算
t = '0' + t;
num--;
}
for (int a = Slen; a >= 0; a--) {
temp = (s[a] - '0') + (t[a] - '0') + carry;
if (temp >= 10) { //如果此时这一位的和超过了10,则代表要进位
temp -= 10;
carry = 1;
}
else {
carry = 0;
}
s[a] = temp + '0'; //给temp转换成字符后保存在此时计算的这一位
}
if (carry == 1) {//防止例如999+1这种情况 上一步计算出来为s='999' carry为1
s = '1' + s;
}
return s;
}
};