大数加法(NC1/考察次数Top20/难度中等)
Posted 码农指南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数加法(NC1/考察次数Top20/难度中等)相关的知识,希望对你有一定的参考价值。
描述:
以字符串的形式读入两个数字,编写一个函数计算它们的和,以字符串形式返回。
(字符串长度不大于100000,保证字符串仅由’0’~'9’这10种字符组成)
示例1
输入:
“1”,“99”
返回值:
“100”
说明:
1+99=100
(题目来自牛客网)
用C++实现如下
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// 输入两个字符串表示的两个数的和,求出结果(以字符串形式返回结果)
//思路,实际是求两个字符串相加,使用栈来解决(先把相加的结果放入一个栈中,然后一个一个出栈)
if(s.empty())
return t;
if(t.empty())
return s;
if(s.size() < t.size()) //确保s的长度比t的长度要长一些
swap(t, s);
int tail = s.size()-t.size(); //确定需要补零的位数
int carry = 0; //进位数
int tmp = 0; //每一位的相加值
while(tail--)
t = '0'+t; //字符的左加,是在字符的前面添加,用于补齐位数
for(int i=s.size()-1; i>=0; i--)
{
tmp=s[i]-'0'+t[i]-'0'+carry; //注意,是'1'-'0'=1,是将数字字符转换成整型数字
if(tmp>=10)
{
carry = 1;
tmp -= 10;
}else{
carry = 0;
}
s[i] = tmp + '0'; //通过ASCII来实现数字字符与整型数之间的转换;
} //数字字符减去'0',得到整型数字
if(carry == 1)
s='1'+s; //注意字符可以直接相加
return s;
}
};
纯手撕代码,如果觉得内容不错麻烦点个赞,后面陆续配上Top100算法题通俗易懂的讲解视频,可以花两个月时间完全掌握,进大厂不是梦,转行狗亲测!
以上是关于大数加法(NC1/考察次数Top20/难度中等)的主要内容,如果未能解决你的问题,请参考以下文章
二叉树根节点到叶子节点的所有路径和(NC5/考察次数Top53/难度中等)