在Java和Python中计算能力不同的结果

2024-09-24 22:30:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过解决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

为什么会不同呢?你知道吗


Tags: 项目方法语言netreturn数字java数据类型
2条回答

在Java中,^{}不能准确地表示2^1000。作为浮点数,Math.pow(2,1000)1.0715086071862673E301。你知道吗

要获得所需的结果,请使用^{},它保留2^1000的实际值。你知道吗

public static BigInteger sumDigits(BigInteger n) {
    BigInteger num = n;
    BigInteger sum = BigInteger.ZERO;
    BigInteger ten = BigInteger.valueOf(10);
    while (num.compareTo(BigInteger.ZERO) > 0) {
        sum = sum.add(num.mod(ten));
        num = num.divide(ten);
    }
    return sum;
}

public static void main(String[] args) {
    System.out.println(sumDigits(BigInteger.valueOf(2).pow(1000)));
}

以上代码的输出是1366。你知道吗

Java中的基本数字类型是int和double。两者都不能处理1000位的数字。Python内置了任意大整数类型。对于Java,您必须找到另一种解决方案。你知道吗

在使用任意大整数算法的语言中,这个问题很小

print sum(int(x) for x in str(2**1000))

如果你没有这个工具,你必须自己编写乘2的代码。你知道吗

相关问题 更多 >