【发布时间】:2017-05-16 07:33:02
【问题描述】:
我正在尝试编写一个将两个大数相乘的代码。这两个数字被划分并存储在一个链表中。
就我而言,每个节点都有 8 位数字。例如:324367823457572583 将存储为
32 | 43678234 | 57572583.
代码如下:
std::list<long long> multiply(const std::list<long long>& _a, const std::list<long long>& _b)
{
std::list<long long> ret;
int mod = 1e8, rem = 0;
auto retit = ret.rbegin(), cur = retit;
for(auto it2 = _b.rbegin(); it2 != _b.rend(); ++it2, ++cur)
{
retit = cur;
for(auto it1 = _a.rbegin(); it1 != _a.rend(); ++it1, ++retit)
{
long long a = (*it2) * (*it1) + rem;
if(retit == ret.rend())
ret.push_front(a%mod);
else
a += *retit, *retit = a%mod;
rem = a/mod;
}
*retit += rem, rem = 0;
}
return ret;
}
我相信这段代码应该可以工作,但它输出错误的答案...
34677523234 * 672891258627 =
2333420 22549932 95439718(计算器输出)
2328204 22549932 95439718(我的输出)
【问题讨论】:
-
你应该做一些调试。
标签: c++ c++11 math linked-list integer-arithmetic