天天看点

c++ 大数乘法并取模

#include <iostream>
#include <utility>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <set>
#include <stack>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <numeric>

using namespace std;
const int mod = 1e9 + 7;


long long quickIntMultiply(long long a, int n) {
    long long ans = 1;
    while (n) {
        if (n & 0x1) {
            ans = ans * a % mod;
        }
        n >>= 1;
        a = a * a % mod;
    }
    return ans;
}

long long quickMultiply(long long a, string s) {
    long long ans = 1;
    for (int i = int(s.size()) - 1; i >= 0; --i) {
        int b = s[i] - '0';
        if (b) {
            ans = ans * quickIntMultiply(a, b) % mod;
        }
        a = quickIntMultiply(a, 10) % mod;
    }
    return ans;
}

int main() {
    long long a = 1234;
    string s = "135";
    cout << quickMultiply(a, s) << endl;
}


           

继续阅读