加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数加减乘除取余

发布时间:2020-12-14 03:25:01 所属栏目:大数据 来源:网络整理
导读:实现大数的加减乘除和取余 #include iostream#include cstdio#include cmath#include queue#include map#include vector#include stack#include algorithm#include set#include cstringusing namespace std;class Biginter {public: string delezero(string

实现大数的加减乘除和取余

#include <iostream>
#include <cstdio>
#include <cmath>
#include <queue>
#include <map>
#include <vector>
#include <stack>
#include <algorithm>
#include <set>
#include <cstring>

using namespace std;
class Biginter {
public:
    string delezero(string a);
    string add(string a,string b);
    string sub(string a,string b);
    string mulit(string a,string b);
    string divid(string a,string b);
    string mod(string a,string b);

};
string Biginter::delezero(string ans) {
    int i = 0;
    while(ans[i] == '0') {
        i++;
    }
    if(i == (int)ans.size()) {
        return "0";
    }
    return ans.substr(i,ans.size()-i);
}
string Biginter::add(string a,string b) {
    string ans = "";
    int l1 = a.size()-1;
    int l2 = b.size()-1;
    int t = 0;
    while(l1>=0&&l2>=0) {
        int sum = t+a[l1]-'0'+b[l2]-'0';
        if(sum > 9) {
            t = 1;
            sum %= 10;
        } else {
            t = 0;
        }
        ans += sum + '0';
        sum = 0;
        l1--;
        l2--;
    }
    while(l1>=0) {
        int sum = a[l1]-'0'+t;
        if(sum > 9) {
            t = 1;
            sum %= 10;
        } else {
            t = 0;
        }
        l1--;
        ans += sum + '0';
    }
    while(l2>=0) {
        int sum = b[l2]-'0'+t;
        if(sum > 9) {
            t = 1;
            sum %= 10;
        } else {
            t = 0;
        }
        ans += sum + '0';
        sum = 0;
        l2--;
    }
    if(t) {
        ans += t+'0';
    }
    reverse(ans.begin(),ans.end());
    return delezero(ans);
};
string Biginter::sub(string a,string b) {
    string ans = "";
    if(a==b) {
        return ans+'0';
    }
    int l1 = a.size()-1;
    int l2 = b.size()-1;
    int t = 0;
    while(l1>=0&&l2>=0) {
        int sum = a[l1]-'0'-(b[l2]-'0')+t;
        if(sum < 0) {
            t = -1;
            sum += 10;
        } else {
            t = 0;
        }
        ans += sum+'0';
        l1--;
        l2--;
    }
    while(l1>=0) {
        int sum = a[l1]-'0'+t;
        if(sum < 0) {
            t = -1;
            sum += 10;
        } else {
            t = 0;
        }
        ans += sum+'0';
        l1--;
    }
    while(l2>=0) {
        int sum = -(b[l2]-'0')+t;
        if(sum < 0) {
            t = -1;
            sum += 10;
        } else {
            t = 0;
        }
        ans += sum+'0';
        l2--;
    }
    reverse(ans.begin(),ans.end());

    return delezero(ans);;
};
string Biginter::mulit(string a,string b) {
    string ans = "";
    int l1=a.size()-1;
    int l2=b.size()-1;
    int c[10005];
    memset(c,sizeof(c));
    for(int i=l1,m=0; i>=0; i--,m++) {
        for(int j=l2,n=0; j>=0; j--,n++) {
            c[n+m] += (a[i]-'0')*(b[j]-'0');
        }
    }
    int t = 0;
    for(int i = 0; i < l1+l2+3; i++) {
        c[i] += t;
        if(c[i] >= 10) {
            t = c[i]/10;
            c[i] %= 10;
        } else {
            t = 0;
        }
        ans += c[i]+'0';
    }
    reverse(ans.begin(),ans.end());
    return delezero(ans);
};
string Biginter::divid(string a,string b) {//a>b
    string ans = "";
    int l1 = a.size();
    int l2 = b.size();
    string bei = a.substr(0,l2-1);
    for(int i = l2-1; i < l1; i++) {
        bei += a[i];
        int t = 0;
        //cout << bei << " = " << b <<endl;
        int flag = 1;
        for(int i = 0;i < bei.size();i++){
            if(bei[i] != '0'){
                flag = 0;
                break;
            }
        }
        if(flag){
            ans += '0';
            continue;
        }
        while((bei.size() > b.size())||(bei.size()==b.size()&& bei>= b)) {
            t++;
            bei = sub(bei,b);
        }
        ans += t+'0';
    }
    return delezero(ans);
};
string Biginter::mod(string a,string b) {
    string ans = "";
    ans = divid(a,b);
    ans = mulit(ans,b);
    ans = sub(a,ans);
    return delezero(ans);
};
int main() {
    string a,b;
    Biginter bigint;
    while(cin >> a >> b) {
        cout <<bigint.mod(a,b)<<endl;
    }
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读