【发布时间】: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什么也不做。