题目
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
数据范围:len(s),len(t)≤100000,字符串仅由’0’~‘9’构成 要求:时间复杂度 O(n)
思路
对于像python这样的高级语言,直接支持从string转int,那么直接相加就可以,对于c++这样的只能通过char和数的运算一一得到结果,'0’的ascall码是48。对齐位数,模拟小学的加法运算就可以得到答案。
代码
python版本:
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 计算两个数之和
# @param s string字符串 表示第一个整数
# @param t string字符串 表示第二个整数
# @return string字符串
#
class Solution:
def solve(self , s: str, t: str) -> str:
# write code here
s = int(s)
t = int(t)
return s+t
c++版本:
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// write code here
if(s.size()>t.size()){
int dc = s.size()-t.size();
string tmp;
for(int i=0; i<dc; i++){
tmp+="0";
}
t = tmp + t;
}else{
int dc = t.size()-s.size();
string tmp;
for(int i=0; i<dc; i++){
tmp+="0";
}
s = tmp+s;
}
int length = s.size();
string ans;
int carry = 0;
for(int i=length-1; i>=0; i--){
int sum_num = s[i]-'0'+t[i]-'0'+carry;
ans += char(sum_num%10+'0');
carry = sum_num/10;
}
if(carry){
ans += char(carry+'0');
}
reverse(ans.begin(), ans.end());
return ans;
}
};