q026. 喵-加-減法運算 5/16/2025

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;
}