3

可能的重复:
BigInteger 的难度

import java.math.BigInteger;  
public class KillerCode{  
    public static void main(String[]args){  
        BigInteger sum=null;  
        for(int i=1;i<=1000;i++){        
            sum=sum+Math.pow(i, i);  
            System.out.println(sum);     
        }    
    }  
} 

当我尝试运行此代码时,出现以下错误消息。

对于参数类型 BigInteger,double,运算符 + 未定义。

我该如何解决这个问题?谢谢你。

4

4 回答 4

6

您不能将典型的数学运算符与 BigIntegers 一起使用,请在此处查看http://docs.oracle.com/javase/6/docs/api/java/math/BigInteger.html

你需要使用BigInteger.add(your numbers here)

进一步说明,

sum = sum.add(new BigInteger(i).pow(i));
于 2012-10-15T03:22:46.333 回答
3

您不能这样做,因为sum不是整数,而是对对象的引用。

与 C++ 不同,java 不允许运算符重载,因此您需要使用类方法来执行操作。

于 2012-10-15T03:25:20.397 回答
1
  1. 初始化sum为有意义的 NON-null值(您当前初始化为null):

    BigInteger sum = BigInteger.ZERO;
    

    否则表达式

    sum = sum.add(...)
    

    没有意义(除非你想要a NullPointerException)。

  2. 使用静态工厂BigInteger.valueOf(long)将整数值映射到BigInteger.

    不要使用表达式new BigInteger(i)new BigInteger(i)由is调用的构造函数BigInteger(byte[]),对于大于 255 的值(您拥有的值...)会产生错误的结果(出于您的目的)。

  3. 用于BigInteger.add(BigInteger)添加。

  4. 使用BigInteger.pow(int)代替Math.pow(int,int); 由于您正在执行(大)整数运算,请避免将您的工作映射到浮点世界的任何事情,即doubleor float,否则您将失去BigInteger.

于 2012-10-15T04:39:08.573 回答
0

BigInteger 没有+定义运算符。根据其在此处找到的 javadocs,您可以使用 .add() 函数来实现您正在寻找的结果。

于 2012-10-15T03:23:19.433 回答