乘以大数字

时间:2016-04-16 10:16:22

标签: c++ pow bigint

问题是要增加大数字。

我使用10 ^ 9的基数,并在数字到达时遇到问题 十分之一。在下面的例子中,我使用了更小的基数 简单。

#include <iostream>
#include <vector>

using namespace std;

typedef vector<long long> largen;

const int base = 1000;

largen  multiply(largen a, largen b) {
    largen c(a.size() + b.size());
    for (size_t i = 0; i<a.size(); ++i)
        for (size_t j = 0, carry = 0; j < (int)b.size() || carry; ++j) {
            long long cur = c[i + j] + a[i] * 1ll * (j < (int)b.size() ? b[j] : 0) + carry;
            carry = (long long)(cur / base);
            c[i + j] = (long long)(cur % base);
        }
    while (c.size() > 1 && c.back() == 0)
        c.pop_back();
    return c;
}

int main() {
    largen a = {100};
    largen result = multiply(a, a);
    for (int i = result.size() - 1; i >= 0; i--) {
        cout << result[i];
    }
    return 0;
}

预期答案&#34; 10000&#34;,实际答案&#34; 100&#34;

1 个答案:

答案 0 :(得分:0)

因此,这就是我们要求最小,完整,可验证的例子的原因。一旦我们有了这个,我们可以看到问题是 nothing 与乘法有关。事实上,问题在于:

    for (int i = result.size() - 1; i >= 0; i--) {
        cout << result[i];
    }

如果您将其更改为:

    for (int i = result.size() - 1; i >= 0; i--) {
        cout << result[i] << '#'
    }

输出从(不正确)“100”变为更有趣的“10#0#”。第二个数字显示为单个数字零,而不是三个零。使用setw和填充以确保除第一个数字之外的所有数字都填零。