【问题标题】:Multiplication with big number (string) function is only possible with atleast one number being 2 digits仅当至少一个数字为 2 位时才能使用大数字(字符串)函数进行乘法运算
【发布时间】:2020-10-18 20:39:32
【问题描述】:

所以我创建了一个函数,如果其中至少一个数字是 2 位数字,它将正确地进行计算。我想概括它以使两个数字都是任意位数。我的代码如下:

string Multiply(string num1, string num2)
{
    if (num1.length() > num2.length())
    {

        string temp = num1;
        num1 = num2;
        num2 = temp;
    }

    string result;
    vector<string> add;
    int carry = 0;
    int value;

    reverse(num1.rbegin(), num1.rend());
    reverse(num2.rbegin(), num2.rend());

    for (int i = 0; i < num1.length(); i++)
    {
        for (int j = 0; j < num2.length(); j++)
        {
            value = (num1[i] - '0') * (num2[j] - '0') + carry;

            char val = (char)value;

            if (value > 9)
            {
                carry = (value - value%10)/10;
                value = value % 10;
                value += '0';
                val = value;
                result += val;
            }
            else
            {
                carry = 0;
                value += '0';
                val = value;
                result += val;
            }
        }
        reverse(result.rbegin(), result.rend());
        add.push_back(result);
        result = "";
        result += string(i+1,'0');
    }
    result = Add(add[0],add[1]);
    return result;
}

包含的 Add 函数是我编写的添加两个字符串的函数,它可以工作。

有什么想法吗?

【问题讨论】:

  • 为什么不直接将您的strings 转换为ints,将它们相乘,然后再转换回string?代码会简单得多。
  • @StephenNewell 正如标题所暗示的,它包含大量数字,所以这样做是行不通的。
  • 你的进位逻辑太疯狂了。 carry = value/10; value %= 10; result += value+'0'; 就是所需要的。根本没有如果或但是。
  • 如果你要除以 10,value - value%10 什么也不做。

标签: c++ string algorithm


【解决方案1】:

事实证明,我可以将结果值与 for 循环中的下一个值相加,使其看起来像这样:

result = "";

    for (int i = 0; i < add.size(); i++)
    {
        result = Add(add[i], result);
    }

【讨论】:

    猜你喜欢
    • 2013-10-08
    • 1970-01-01
    • 2022-11-16
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-29
    • 1970-01-01
    • 2021-10-03
    相关资源
    最近更新 更多