a021. 大數運算 的簡化版 (只有加減)
解法一、模擬
用字串模擬加減過程
✅ 完整代碼
評分結果(參考) : AC (4ms, 1.7MB)
#include <bits/stdc++.h>
using namespace std;
// a < b ?
bool alb(string a, string b){
if(a.size() != b.size()) return a.size() < b.size();
return a < b;
}
// +
string bigAdd(string a, string b){
int size = max(a.size(), b.size());
string ans;
int x = 0;
for(int i=0; i<size; i++){
int ai = i<a.size() ? a[a.size()-i-1]-'0' : 0;
int bi = i<b.size() ? b[b.size()-i-1]-'0' : 0;
int res = ai + bi + x;
ans += (res%10 + '0');
x = res/10;
}
if(x > 0) ans += (x + '0');
while(ans.size()>1 && ans.back()=='0') ans.pop_back();
reverse(ans.begin(), ans.end());
return ans;
}
// -
string bigSub(string a, string b){
int size = max(a.size(), b.size());
string ans;
bool neg = alb(a, b);
if(neg) swap(a, b);
int x = 0;
for(int i=0; i<size; i++){
int ai = i<a.size() ? a[a.size()-i-1]-'0' : 0;
int bi = i<b.size() ? b[b.size()-i-1]-'0' : 0;
int res = ai - bi - x;
if(res < 0){
ans += (res+10 + '0');
x = 1;
}
else{
ans += (res + '0');
x = 0;
}
}
while(ans.size()>1 && ans.back()=='0') ans.pop_back();
if(neg) ans += '-';
reverse(ans.begin(), ans.end());
return ans;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
string a, b;
char op;
cin >> a >> op >> b;
if(op == '+') cout << bigAdd(a, b);
else cout << bigSub(a, b);
return 0;
}