【发布时间】:2013-03-31 18:21:27
【问题描述】:
我已经开始编写一个 bignum 库,其中包含一个 short 向量来表示值、一个打印函数和负数支持。但是,我找不到实现长加法的好方法,如下所示:
123
+123
----
246
我拥有的最新的没有给出段错误的代码是这样的:
void add(unsigned long long b)
{
for(long long i=v.size()-1;i>=0;--i)
{
if((b+v[i])<10)
v[i]+=b;
else // Carry
{
if(i==0) // 1st digit
{
v.push_front(1); // Can't be more than 1
}
else
v[i-1]++; // Increment digit to the left
}
}
}
,但是带进位的加法不正确(10+1 是 21)
编辑:它被实现为一个类
【问题讨论】:
-
加法很简单。您添加数字,如果总和大于单个数字可以容纳,则为下一个位置进行进位。
-
除非你真的想要
base-10数字,bignum库通常使用base-B,其中B=2**w和w是(无符号)中的位数整数类型。 -
"什么都不做" 当
v.size()是1,你看到这个函数做了什么? -
当我给它赋值 1 时,它仍然对这个值没有任何作用
-
进位机制不对
标签: c++ bignum arbitrary-precision