题解 | #又一版 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")