仅当至少一个数字为 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 函数是我编写的添加两个字符串的函数,它可以工作。
有什么想法吗?
【问题讨论】:
为什么不直接将您的string
s 转换为int
s,将它们相乘,然后再转换回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 位时才能使用大数字(字符串)函数进行乘法运算的主要内容,如果未能解决你的问题,请参考以下文章