我试图通过解决Java上的问题来自学Java项目Euler.net,就像我之前对Python所做的那样。在尝试问题16时,我复制了前面在Python中使用的方法。但是,两种语言的结果输出是不同的。我认为这与Java数据类型不同于Python有关。问题是把数字2^1000中的数字相加。你知道吗
在Python中:
def sumdigits(n):
s = 0
while n > 0:
s = s + (n % 10)
n = n / 10
return s
print sumdigits(pow(2,1000))
在Java中:
public static double SumDigits(double n){
double s = 0;
while (n > 0){
s = s + (n % 10);
n = n / 10;}
return s;
}
System.out.println(SumDigits(Math.pow(2,1000)));
Python生成了正确的结果,Java生成了1197.1463275484991
为什么会不同呢?你知道吗
在Java中,^{} 不能准确地表示2^1000。作为浮点数,
Math.pow(2,1000)
是1.0715086071862673E301
。你知道吗要获得所需的结果,请使用^{} ,它保留2^1000的实际值。你知道吗
以上代码的输出是
1366
。你知道吗Java中的基本数字类型是int和double。两者都不能处理1000位的数字。Python内置了任意大整数类型。对于Java,您必须找到另一种解决方案。你知道吗
在使用任意大整数算法的语言中,这个问题很小
如果你没有这个工具,你必须自己编写乘2的代码。你知道吗
相关问题 更多 >
编程相关推荐