高精度加法,减法, 乘法,除法板子

高精度加法板子

#include <bits/stdc++.h>
using namespace std;

vector<int> A, B, C;
string a, b;

signed main(){
    cin >> a >> b;
    for(int i = a.size() - 1; i >= 0; --i) A.push_back(a[i]-'0');
    for(int i = b.size() - 1; i >= 0; --i) B.push_back(b[i]-'0');
    
    int t = 0;
    for(int i = 0; i < A.size() || i < B.size()  || t; ++i){
        if(i < A.size()) t += A[i];
        if(i < B.size()) t += B[i];
        C.push_back(t%10);
        t /= 10;
    }
    
    for(int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);
    
    return 0;
}

高精度减法板子

#include <bits/stdc++.h>
using namespace std;

int n;
string a, b;
vector<int> A, B, C;

bool cmp(string a, string b){
    if(a.size() != b.size()) return a.size() > b.size();
    for(int i = 0; i < a.size(); ++i){
        if(a[i] != b[i]) return a[i] > b[i];
    }
    
    return true;
}
signed main(){
    cin >> a >> b;
    if(!cmp(a, b)){
        printf("-");
        string c = a;
        a = b; b = c;
    }
    for(int i = a.size() - 1; i >= 0; --i) A.push_back(a[i]-'0');
    for(int i = b.size() - 1; i >= 0; --i) B.push_back(b[i]-'0');
    int t = 0;
    for(int i = 0; i < A.size(); ++i){
        t = A[i] - t;
        if(i < B.size()) t -= B[i];
        C.push_back((t + 10) % 10);
        if(t < 0) t = 1;
        else t = 0;
    }

    while(C.size() > 1 && C.back() == 0) C.pop_back();
    for(int i = C.size() - 1; i >= 0; --i) printf("%d", C[i]);
    
    return 0;
}

高精度乘法板子

#include <bits/stdc++.h>

using namespace std;


const int N = 1e6 + 10;



string a, b;
vector<int> A, B;
long long C[2*N];

signed main(){
    cin >> a >> b;
    for(int i = a.size() - 1; i >= 0; --i) A.push_back(a[i]-'0');
    for(int i = b.size() - 1; i >= 0; --i) B.push_back(b[i]-'0');
    
    for(int i = 0; i < A.size(); ++i){
        for(int j = 0; j < B.size(); ++j){
            C[i+j] += A[i] * B[j];
        }
    }
    
    int n = a.size() + b.size();
    for(int i = 0; i <= n; ++i){
        long long t = C[i];
        C[i] = t % 10;
        C[i+1] += t / 10;
    }
    int k = n;
    while(k > 0 && C[k] == 0) --k;
    for(int i = k; i >= 0; --i){
        printf("%lld", C[i]);
    }
    
    return 0;
}

高精度除法板子

#include <bits/stdc++.h>
using namespace std;

vector<int> A;

signed main(){
    ios::sync_with_stdio(false); cin.tie(0), cout.tie(0);
    string a; cin >> a;
    int b; cin >> b;
    
    int cur = 0;
    for(int i = 0; i < a.size(); ++i){
        cur = cur * 10 + (a[i]-'0');
        A.push_back(cur / b);
        cur %= b;
    }
    int k = 0;
    while(k < A.size() - 1 && A[k] == 0) ++k;
    for(; k < A.size(); ++k) cout << A[k];
    
    cout << endl << cur << endl;
    
    
    return 0;
}
posted @ 2025-04-05 17:05  awei040519  阅读(26)  评论(0)    收藏  举报