题解 | #大数加法#
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
#include <algorithm>
#include <string>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// write code here
int m = s.size();
int n = t.size();
int ma = max(m,n);
int mi = min(m,n);
int flage = 0;
string res;
for(int i = 1;i<=ma;++i)
{
int num1,num2;
if(i<= mi)
{
num1 = s[m-i] - '0';
num2 = t[n-i] - '0';
}
else if(i > mi && m>n)
{
num1 = s[m-i] - '0';
num2 = 0;
}
else {
num1 = 0;
num2 = t[n-i] - '0';
}
int sum = num1 + num2;
if((sum + flage) >= 10)
{
res += (sum + flage - 10) + '0';
flage = 1;
}
else
{
res += sum + flage + '0';
flage = 0;
}
}
if(flage)
res += '1';
reverse(res.begin(), res.end());
return res;
}
};
解题思路:模拟
上面是自己写的
以下是简洁的版本:
#include <algorithm>
#include <string>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// write code here
//若是其中一个为空,返回另一个
if(s.empty())
return t;
if(t.empty())
return s;
//让s为较长的,t为较短的
if(s.size() < t.size())
swap(s,t);
int carry = 0;//进位标志
//从后往前遍历较长的字符串
for(int i = s.size()-1;i>=0;i--)
{
//转数字加上进位
int temp = s[i] - '0' + carry;
//获取较短的字符串相应的从后往前的下标
int j = i - s.size() + t.size();
//如果较短字符串还有
if(j >= 0)
temp += t[j] - '0';//将其进行加法
carry = temp / 10;//取进位
temp = temp % 10;//去十位
s[i] = temp + '0';//修改结果
}
//最后如果还有进位
if(carry)
s = '1' + s;
return s;
}
};
查看9道真题和解析
SHEIN希音公司福利 222人发布