仅当至少一个数字为 2 位时才能使用大数字(字符串)函数进行乘法运算

Posted

技术标签:

【中文标题】仅当至少一个数字为 2 位时才能使用大数字(字符串)函数进行乘法运算【英文标题】:Multiplication with big number (string) function is only possible with atleast one number being 2 digits 【发布时间】: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 什么也不做。 【参考方案1】:

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

result = "";

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

【讨论】:

以上是关于仅当至少一个数字为 2 位时才能使用大数字(字符串)函数进行乘法运算的主要内容,如果未能解决你的问题,请参考以下文章

在php中,怎样把数字转化为字符串

当每个数字超过 15 位时,Nodejs / Javascript 获取开始数字和结束数字之间的数字

数字转字符串,长度前面补0

有趣的数

我怎样才能简单地使用这种数字格式验证正则表达式?

密码由 6-16 位数字、字母或符号组成,至少包含 2 种字符。 保存