求高精模板

灌水区

Dream__Sky @ 2024-03-23 13:21:41

rt

谢谢


by jung_le666 @ 2024-03-23 13:36:13

#include<bits/stdc++.h>
using namespace std;
struct bignum{ 
    char s[20000]; 
    int num[20000]; 
    int len,flag; 
    bignum(){ 
        memset(num,0,sizeof(num)); 
        len=1; 
        flag=0; 
    }
    bignum(int x){
        for(len=1;x;len++){
            num[len]=x%10;
            x/=10;
        }
        len--;
    }
    int &operator[](int i){
        return num[i];
    }
    friend bool operator <(bignum a,bignum b){
        if(a.len != b.len){
            return a.len<b.len;
        }
        for(int i=a.len;i>=1;i--){
            if(a[i]<b[i])return true;
            if(a[i]>b[i])return false;
        }
        return false;
    }
    void input(){
        scanf("%s",s+1);
        len = strlen(s+1);
        for(int i=1;i<=len;i++)
            num[i] = s[len-i+1]-'0';
    }
    void print(){
        if(flag)cout<<'-';
        for(int i=len;i>=1;i--)cout<<num[i];
    }
};
bignum operator+(bignum a,bignum b){
    bignum ans;
    ans.len = max(a.len,b.len);
    for(int i=1;i<=ans.len;i++){
        ans[i] += a[i]+b[i];
        if(ans[i] >= 10){
            ans[i+1]++;
            ans[i]-=10;
        }
    }
    if(ans[ans.len + 1]){
        ans.len++;
    }
    return ans;
}
bignum operator-(bignum a,bignum b){
    bignum ans;
    if(a<b){
        ans.flag=1;
        swap(a,b);
    }
    ans.len = a.len;
    for(int i=1;i<=ans.len;i++){
        ans[i] += a[i]-b[i];
        if(ans[i] < 0){
            ans[i+1]--;
            ans[i]+=10;
        }
    }
    while(ans.len > 1 && ans[ans.len +1]==0)ans.len--;
    return ans;
}
bignum operator*(bignum a,bignum b){
    bignum ans;
    ans.len = a.len+b.len;
    for(int i=1;i<=a.len;i++){
        for(int j=1;j<=b.len;j++)
            ans[i+j-1] += a[i]*b[i];
    }
    for(int i=1;i<=ans.len;i++){
        if(ans[i]>=10){
            ans[i+1]+=ans[i]/10;
            ans[i]%=10;
        }
    }
    while(ans.len > 1 && ans[ans.len]==0)ans.len--;
    return ans;
}
//除法反正用不到( 
int main(){
    bignum a;
    a.input();
    a.print();
    return 0;
}

供参考(结构体型)


by Guo1 @ 2024-03-23 13:44:52

A+B高精那题,有一个题解就是把加减乘除都谢了


by Oct_ @ 2024-03-23 15:42:13

我的高精度模板


|