一、题目
题目描述
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)
示例1
输入
"1","99"
返回值
"100"
说明
1+99=100
二、思路
1、遇到的坑:刚开始以为直接把字符串用stoi转成整形,整形再相加,然后再通过sprintf(str,"%d",a)转换成字符型,然后发现根本不行,溢出了
2、分类讨论
- s.length()<t.length()
1、对齐右端
2、字符转为整数相加,判断是否有进位(超过10),如果有记录进位,取余,整形转换为字符型
3、s相加完后,t单独相加进位 - s.length()==t.length()
1、对齐右端
2、字符转为整数相加,判断是否有进位(超过10),如果有记录进位,取余,整形转换为字符型 - s.length()>t.length()
1、对齐右端
2、字符转为整数相加,判断是否有进位(超过10),如果有记录进位,取余,整形转换为字符型
3、t相加完后,s单独相加进位
3、最后判断进位是否为1,如果是在在str前加1,如果不是直接返回str
三、代码
class Solution
{
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t)
{
int nums = 0;
int numt = 0;
if (s.empty())
{
return t;
}
if (t.empty())
{
return s;
}
string str;
int jinzhi = 0;
int time = 0;
if (s.length() < t.length())
{
//int x=t[t.length()-time-1]-'0';
for (int i = s.length() - 1, j = t.length() - 1; j >= 0; --i, --j)
{
if (i >= 0)
{
int x = s[i] - '0';
int y = t[j] - '0';
if ((x + y + jinzhi) < 10)
{
char snum = (x + y + jinzhi) + '0';
str = snum + str;
jinzhi = 0;
}
else
{
char snum = (x + y + jinzhi) % 10 + '0';
str = snum + str;
jinzhi = 1;
}
}
else
{
int x = (t[j] - '0') + jinzhi;
if (x < 10)
{
char snum = x + '0';
str = snum + str;
jinzhi = 0;
}
else
{
char snum = x % 10 + '0';
str = snum + str;
jinzhi = 1;
}
}
}
}
else if (s.length() == t.length())
{
for (int i = s.length() - 1, j = t.length() - 1; j >= 0 && i >= 0; --i, --j)
{
int x = s[i] - '0';
int y = t[j] - '0';
if ((x + y + jinzhi) < 10)
{
char snum = (x + y + jinzhi) + '0';
str = snum + str;
jinzhi = 0;
}
else
{
char snum = (x + y + jinzhi) % 10 + '0';
str = snum + str;
jinzhi = 1;
}
}
}
else
{
for (int i = s.length() - 1, j = t.length() - 1; i >= 0; --i, --j)
{
if (j >= 0)
{
int x = s[i] - '0';
int y = t[j] - '0';
if ((x + y + jinzhi) < 10)
{
char snum = (x + y + jinzhi) + '0';
str = snum + str;
jinzhi = 0;
}
else
{
char snum = (x + y + jinzhi) % 10 + '0';
str = snum + str;
jinzhi = 1;
}
}
else
{
int x = (s[i] - '0') + jinzhi;
if (x < 10)
{
char snum = x + '0';
str = snum + str;
jinzhi = 0;
}
else
{
char snum = x % 10 + '0';
str = snum + str;
jinzhi = 1;
}
}
}
}
if(jinzhi==1)
{
str='1'+str;
}
return str;
}
};