题解 | #大数加法#
大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 计算两个数之和
* @param s string字符串 表示第一个整数
* @param t string字符串 表示第二个整数
* @return string字符串
*/
string solve(string s, string t) {
// 如果两个字符串有空的,直接返回另一个字符串,不用管另一个字符串是否为空
if(s.size() == 0) return t;
if(t.size() == 0) return s;
string result;
stack<char> st;
int add = 0;
int i = s.size() - 1, j = t.size() - 1;
// 从末位往前加,直到一个字符被加完
for(; i >= 0 && j >= 0; --i, --j){
// 确定入栈的字符
st.push('0' + ((s[i] - '0') + (t[j] - '0') + add ) % 10);
//cout<<"栈的大小:"<<st.size()<<endl;
if((s[i] - '0') + add + (t[j] - '0') >= 10){
add = 1;
} else {
add = 0;
}
//cout<<"栈顶元素:"<<st.top()<<endl;
}
// s加完,单独处理t剩下的字符
if(i == -1){
for(; j >= 0; --j){
st.push('0' + (add + (t[j] - '0')) % 10);
//cout<<"栈的大小:"<<st.size()<<endl;
if(add + (t[j] - '0') >= 10){
add = 1;
} else {
add = 0;
}
//cout<<"栈顶元素:"<<st.top()<<endl;
}
}
// t加完,单独处理s剩下的字符
else if(j == -1){
for(; i >= 0 ; --i){
st.push('0' + (add + (s[i] - '0')) % 10);
//cout<<"栈的大小:"<<st.size()<<endl;
if((s[i] - '0') + add >= 10){
add = 1;
} else {
add = 0;
}
}
//cout<<"栈顶元素:"<<st.top()<<endl;
}
// 最后判断进位符add是否为1,为1表示有进位,先让result=‘1’
if(add == 1) result = '1';
// 将栈顶元素一次弹出,加到result末尾
while(!st.empty()){
//cout<<"栈的大小:"<<st.size()<<endl;
result.push_back(st.top());
st.pop();
}
return result;
}
};
#刷题#机械转码刷题进行中~ 文章被收录于专栏
这是一个机械专业学生艰难的转码之路,只会用最简单的想法跟思路,请各路大神不吝赐教,在评论区分享你们的想法!!!
