大数加减乘除取模运算模板

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

string add(string a, string b) {
    string c;
    int len1 = a.length();
    int len2 = b.length();
    int len = max(len1, len2);
    for(int i = len1; i < len; i ++)
        a = "0" + a;
    for(int i = len2; i < len; i ++)
        b= "0" + b;
    int ok = 0;
    for(int i = len - 1; i >= 0; i --) {
        char temp = a[i] + b[i] - '0' + ok;
        if(temp > '9') {
            ok = 1;
            temp -= 10;
        }
        else ok = 0;
        c = temp + c;
    }
    if(ok) c = "1" + c;
    return c;
}

string sub(string a, string b) {
    string c;
    bool ok = 0;
    int len1 = a.length();
    int len2 = b.length();
    int len = max(len1, len2);
    for(int i = len1; i < len; i ++)
        a = "0" + a;
    for(int i = len2; i < len; i ++)
        b = "0" + b;
    if(a < b) {
        string temp = a;
        a = b;
        b = temp;
        ok = 1;
    }
    for(int i = len - 1; i >= 0; i --) {
        if(a[i] < b[i]) {
            a[i - 1] -= 1;
            a[i] += 10;
        }
        char temp = a[i] - b[i] + '0';
        c = temp + c;
    }
    int pos = 0;
    while(c[pos] == '0' && pos < len) pos ++;
    if(pos == len) return "0";
    if(ok) return "-" + c.substr(pos);
    return c.substr(pos);
}

string mul(string a, int b) {
    string c;
    char s;
    int len = a.length();
    int ok = 0;
    for(int i = len - 1; i >= 0; i --) {
        int temp = (a[i] - '0') * b + ok;
        ok = temp / 10;
        s = temp % 10 + '0';
        c = s + c;
    }
    while(ok) {
        s = ok % 10 + '0';
        c = s + c;
        ok /= 10;
    }
    return c;
}

string div(string a, int b) {
    string c;
    int len = a.length();
    int ans = 0;
    char s;
    for(int i = 0; i < len; i ++) {
        ans = ans * 10 + a[i] - '0';
        s = ans / b + '0';
        ans %= b;
        c += s;
    }
    int pos = 0;
    while(pos < len && c[pos] == '0') pos ++;
    if(pos == len) return "0";
    return c.substr(pos);
}

int mod(string s, int x) {
    int len = s.length();
    int ans = 0;
    for(int i = 0; i < len; i ++)
        ans = (ans * 10 + s[i] - '0') % x;
    return ans;
}

string delZero(string s) {
    int len = s.length();
    string ans = "";
    int temp = -1;
    int flag = 0;
    if(s[0] == '-') flag = 1;
    for(int i = flag; i < len; i ++) {
        if(s[i] != '0') {
            temp = i;
            break;
        }
    }
    if(temp == -1)
        return "0";
    if(flag) ans += '-';
    for(int i = temp; i < len; i ++)
        ans += s[i];
    return ans;
}

int main() {
    string s, t;
    return 0;
}

  

posted @ 2019-04-07 10:51  丧心病狂工科女  阅读(513)  评论(0编辑  收藏  举报