大数乘法c ++

时间:2015-04-05 00:54:44

标签: c++ arrays class bigint

所以这里我有两个类,在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);
    }

2 个答案:

答案 0 :(得分:1)

一些提示:

你的调整大小没有做扩展部分的初始化

你的体型 - 轮班 - (i - size-1)部分绝对是错误的。当我减少时它会增加......

为什么不从a = 1和b = 2这样的简单情况开始,然后逐行使用调试器跟踪?

另一个有用的轨道是:

尝试使用相同的问题逐行跟踪您的代码,然后您可以轻松找出您正在制作的逻辑错误。

答案 1 :(得分:0)

除非你把它作为家庭作业或乐趣,否则不要自己实施数学库。这种想法已经被其他人付出了太多努力。下载一些带有大int支持的现成数学库。