题解 | #又一版 A+B#
又一版 A+B
https://www.nowcoder.com/practice/9255c05d45b8406c9b588d7c57aa920b
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stack>
#include <map>
using namespace std;
string add(string s1, string s2){
string res = "";
while(s1.size() > s2.size()){ //长度补齐
s2 = "0" + s2;
}
while(s1.size() < s2.size()){
s1 = "0" + s1;
}
int cur;
int carry = 0;
for(int i = s1.size() - 1; i >= 0; i--){
cur = carry + s1[i] - '0' + s2[i] - '0'; //当前这个位的和
carry = cur / 10; //进位
cur %= 10;
char c = cur + '0';
res.insert(0, 1, c); //插入到结果的第一位
}
if(carry != 0){ //计算完之后如果还有进位
char c = carry + '0';
res.insert(0, 1, c);
}
return res;
}
int divide(string &a, int x){ //字符串除法
int remainder = 0; //上一轮剩下的
for(int i = 0; i < a.size(); i++){ //从第一位除到最后一位
int cur = a[i] - '0'; //当前i位置的数值
remainder = remainder * 10 + cur;
a[i] = remainder / x + '0';
remainder %= x;
}
int index = 0;
while(a[index] == '0'){ //找到第一个不是0的位置
index++;
}
a = a.substr(index); //截取
return remainder; //把最后的余数返回回去
}
int main() {
stack<int> mystack;
int m;
while (scanf("%d", &m) != EOF) { //这里要写成 != EOF 不能写成 != 0 我也不知道为啥。。。
if(m == 0){
break;
}
string a, b;
cin >> a >> b;
a = add(a, b);
while(a.size() > 0){
int t = divide(a, m);
mystack.push(t);
}
while (!mystack.empty()) {
int t = mystack.top();
mystack.pop();
printf("%d", t);
}
printf("\n");
}
}
// 64 位输出请用 printf("%lld")
查看13道真题和解析