如何将两个数组与每个元素相乘作为数字c ++

Posted

技术标签:

【中文标题】如何将两个数组与每个元素相乘作为数字c ++【英文标题】:How to multiply two arrays with each element as a digit c++ 【发布时间】:2014-10-25 01:39:36 【问题描述】:

我将有一个长度为 50 个元素的数组。每个元素将包含一个数字以形成一个 50 位数字。我想要做的是将这个 50 位长数组乘以另一个 50 位长数组。我想到的方法是将每个数字转换为一个字符串。然后生成一个算法,一次乘以 20 位数字。然后,一旦最后一个 for 循环超出范围,我可以通过将其从字符串转换为逐位重建新数组。在我尝试这个之前有什么替代的想法,或者我得到的也是你会做的?

【问题讨论】:

我们通常评论代码而不是设计。我的建议是考虑如何使用纸和铅笔将两个 50 位数字相乘。 请记住,字符串实际上已经是一个数组,因此我认为您不应该首先转换为字符串。 有什么理由不使用现有的多精度算术库? boost cpp_int 或其他不会让我输出或存储高于 20 位的数字 @shuttle,你认为char数组会更好吗? 【参考方案1】:
int n1[50], n2[50], out[51];
// n1 and n2 must be populated here
int carry = 0;
for (int cur = 49; cur >= 0; --cur) 
  out[cur+1] = n1[cur] * n2[cur] + carry;
  carry = out[cur+1] / 10;
  out[cur+1] %= 10;

out[0] = carry;

【讨论】:

我以为 OP 要求的是 NxN 乘法,而不是逐位乘法。【参考方案2】:

我相信您可以在名为“Multiply Strings”的 leetcode OJ 中找到问题。 这是我的解决方案。仅供参考。希望这会有所帮助:)

class Solution 
public:
    string multiply(string num1, string num2) 
        int s1(num1.size()), s2(num2.size()), size(s1+s2);
        vector<int> digit(size,0), carry(size,0);  // digit: store current digit, carry: store carry digit
        for(int i = 0; i < s1; ++i)
            for(int j = 0; j < s2; ++j)
                int mul = num1[s1-1-i]-'0';
                int muled = num2[s2-1-j]-'0';
                int tmp = mul*muled;
                digit[size-1-i-j] += tmp%10;  // accum
                carry[size-1-i-j-1] += tmp/10;  // accum
            
        
        int carrFlag(0);  // initial carry_flag
        for(int i = size-1; i >= 0; --i)  // merge digit and carry
            int sum = digit[i] + carry[i] + carrFlag;
            ret.insert(ret.begin(),1,'0'+sum%10);  // compose result string
            carrFlag = sum/10;  // update carry_flag
        
        int pos(0);
        while(ret[pos] == '0')  ++pos; // get rid of extra 0's
        if(pos>=size)    return "0";   // edge case
        return ret.substr(pos);
    
private:
    string ret;
;

【讨论】:

以上是关于如何将两个数组与每个元素相乘作为数字c ++的主要内容,如果未能解决你的问题,请参考以下文章

如果与给定的数字匹配,则将数组中的数字相乘

如何构建神经网络以将两个数字相乘

1.1.1.3简单例子

如何从两个数组中所有元素的乘积创建矩阵?

如何将一个字符串中的 2 个数字与 PHP 中字符串之外的第 3 个数字相乘?

将PHP字符串中两个字符之间的数字相乘