问题是
给定两个表示为字符串的非负整数num 1和num 2,返回num 1和num 2的乘积,也表示为字符串。
注意:您不能使用任何内置的BigInteger库或直接将输入转换为整数。
代码:
class Solution {
public String multiply(String num1, String num2) {
long n1=0, n2=0, res;
n1 = Long.parseLong(num1);
n2 = Long.parseLong(num2);
res = n1 * n2;
String str = Long.toString(res);
return str;
}
}
问题是
它的工作正常时,我给予较小的数字是这样:
输入:40、90
产量:3600
输入:100,2099
产量:209900
如果我给予输入:
输入:498828660196、840477629533
输出:“-3269442614257959980”
但实际输出为:419254329864656431168468。我不知道为什么会有这样的答案。我也使用长数据类型。有人能解释一下并给予解决这个问题的方法吗?
3条答案
按热度按时间jyztefdp1#
因为你是用长整型存储的,长整型的取值范围是10^18,但是得到的结果是10^23,所以它会抛出一些垃圾值,因为它超出了存储范围,这就是为什么你有字符串的返回类型,因为你可以用字符串存储它,而不是长整型数据类型。
ibps3vxo2#
长整型存储在64位上,最大容量为2^63 - 1(9.223372e+18)所以你超出了范围。我建议你把你的测试推得太远了。如果它没有被禁止,你本可以改成BigInteger,或者改成float,但是为了你的问题,假设这些数字超出范围是可以的,如果你愿意,你可以检查输入是否低于10^9并抛出超出范围错误。
ff29svar3#
谢谢你们!
我找到了解决方案。