所以这里我有两个类,在Safearray和一个bigint计算器上(SafeArray是不完美但它有用的)我真正需要帮助的是我的乘法算法,当我编译没有任何反应时,我认为算法主要是对(如果不是请帮助我解决它),但主要是我认为问题是返回并打印最终答案。任何帮助将不胜感激,谢谢。
void multiply(const bigint &A)
{
bigint temp1; // bigint with value 0
int carry = 0;
int shift = 0;
bigint temp2;
for(int j = size-1; j >= 0; j--) //no member size in bigint
{
for(int i=size-1; i>=0; i--)
{
// bigint with value 0 and size: size + A.size
int result = (arr->get(i)*A.arr->get(j)+carry);
if(size - shift - (i - size-1) >= 0)
temp2.arr->set(size - shift - (i - size-1), result%10);
else
break;
carry=result/10;
}
shift++;
temp1.add_pos(temp2);
}
this->assign(temp1);
}
答案 0 :(得分:1)
一些提示:
你的调整大小没有做扩展部分的初始化
你的体型 - 轮班 - (i - size-1)部分绝对是错误的。当我减少时它会增加......
为什么不从a = 1和b = 2这样的简单情况开始,然后逐行使用调试器跟踪?
另一个有用的轨道是:
尝试使用相同的问题逐行跟踪您的代码,然后您可以轻松找出您正在制作的逻辑错误。
答案 1 :(得分:0)
除非你把它作为家庭作业或乐趣,否则不要自己实施数学库。这种想法已经被其他人付出了太多努力。下载一些带有大int支持的现成数学库。