大数运算操作

#include 
#include 
#include 
using namespace std;

void mulpl(string ch1, string ch2) {
    int len1 = ch1.size();
    int len2 = ch2.size();
    char ch3[1000009];
    for (int i = 0; i < 1000009; ++i)
        ch3[i] = '\0';
    for (int i = 0; i < len1; ++i) {
        for (int j = 0; j < len2; ++j) {
            ch3[i+j] += (ch1[i] - '0') * (ch2[j]-'0');// 直接实现了移位相加
            if (ch3[i + j] > 9 && (i + j) > 0) {
                ch3[i + j - 1] += ch3[i + j] / 10;
                ch3[i + j] %= 10;
            }
        }
    }
    for (int i = len1 + len2 - 1; i > 0; --i) {
        if (ch3[i] > 9) {
            ch3[i - 1] += ch3[i] / 10;
            ch3[i] %= 10;
        }
    }
    if (ch3[0] > 9) {
        cout << ch3[0] / 10;
        ch3[0] %= 10;
    }
    for (int i = 0; i < len1 + len2 - 1; ++i)
        cout << char(ch3[i] + '0');
    cout << endl;
}

void add(string ch1, string ch2) {
    int len1 = ch1.size();
    int len2 = ch2.size();
    char ch3[1000009];
    for (int i = 0; i < 1000009; ++i)
        ch3[i] = '\0';
    int lenmax = max(len1,len2);
    for (int i = 0; i < lenmax; ++i) {
        char c1, c2;
        c1 = i > len1 ? '0' : ch1[i];
        c2 = i > len2 ? '0' : ch2[i];
        ch3[i] = c1-'0' + c2-'0';
    }
    for (int i = lenmax; i > 0; --i) {
        if (ch3[i] > 9) {
            ch3[i - 1] += ch3[i] / 10;
            ch3[i] %= 10;
        }
    }
    if (ch3[0] > 9) {
        cout << ch3[0] / 10;
        ch3[0] %= 10;
    }
    for (int i = 0; i < lenmax; ++i)
        cout << char(ch3[i] + '0');
    cout << endl;
}
int main()
{
    string s1, s2;
    cin >> s1 >> s2;
    mulpl(s1,s2);
    add(s1,s2);


    return 0;
}

你可能感兴趣的:(大数运算操作)