<p>我试图通过解决Java上的问题来自学Java项目Euler.net,就像我之前对Python所做的那样。在尝试问题16时,我复制了前面在Python中使用的方法。但是,两种语言的结果输出是不同的。我认为这与Java数据类型不同于Python有关。问题是把数字2^1000中的数字相加。你知道吗</p>
<p>在Python中:</p>
<pre><code>def sumdigits(n):
s = 0
while n > 0:
s = s + (n % 10)
n = n / 10
return s
print sumdigits(pow(2,1000))
</code></pre>
<p>在Java中:</p>
<pre><code> 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)));
</code></pre>
<p>Python生成了正确的结果,Java生成了1197.1463275484991</p>
<p>为什么会不同呢?你知道吗</p>
<p>Java中的基本数字类型是int和double。两者都不能处理1000位的数字。Python内置了任意大整数类型。对于Java,您必须找到另一种解决方案。你知道吗</p>
<p>在使用任意大整数算法的语言中,这个问题很小</p>
<pre><code>print sum(int(x) for x in str(2**1000))
</code></pre>
<p>如果你没有这个工具,你必须自己编写乘2的代码。你知道吗</p>