【问题标题】:big num multiplication c++大数乘法 C++
【发布时间】:2025-12-09 21:05:02
【问题描述】:

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

【问题讨论】:

  • 查看您的代码,不清楚您是在 arr[0] 中存储最高有效位还是在 arr[0] 中存储最低有效位。如果您将最低有效位存储在arr[0] 中,您的一些逻辑将被简化,并且更易于调试。

标签: c++ arrays class bigint


【解决方案1】:

一些提示:

您的调整大小没有对扩展部分进行初始化

你的 size - shift - (i - size-1) 部分肯定是错误的。它增加而我减少......

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

另一个有用的轨道是:

试着逐行追踪你的代码,并用同样的问题手工比较你的数学,然后你可以很容易地找出你所犯的逻辑错误。

【讨论】:

    【解决方案2】:

    除非您将其作为家庭作业或娱乐,否则不要自己实现数学库。这样的想法已经被付出更多努力的其他人多次提出。下载一些支持大整数的现成数学库。

    【讨论】:

    • 上课用的不是吗?