返回错误值的Java BigInteger
我正在尝试使用BigInteger生成所有数字的n位数返回错误值的Java BigInteger,java,biginteger,Java,Biginteger,我正在尝试使用BigInteger生成所有数字的n位数 for(int i=0;i 有什么我遗漏的吗 是的。Math.pow(10,i)返回一个double,它只有53位精度 您可以重写代码,改用biginger.pow方法 然而,(海事组织)更简单的版本将是 genL = BigInteger.ZERO; for (int i = 0; i < n; i++) { genL = genL.mult(BigInteger.TEN) + BigInteger.ONE; Sy
for(int i=0;i
有什么我遗漏的吗
是的。Math.pow(10,i)
返回一个double
,它只有53位精度
您可以重写代码,改用biginger.pow
方法
然而,(海事组织)更简单的版本将是
genL = BigInteger.ZERO;
for (int i = 0; i < n; i++) {
genL = genL.mult(BigInteger.TEN) + BigInteger.ONE;
System.out.println(i + " " + genL);
}
genL=biginger.ZERO;
对于(int i=0;i
或者,如果您只关心输出的外观,只需使用字符串生成器/字符串连接;例如
genL = new StringBuilder();
for (int i = 0; i < n; i++) {
genL.append("1");
System.out.println(i + " " + genL);
}
genL=newstringbuilder();
对于(int i=0;i
使用biginger(String val)
构造函数创建biginger
会更简单(也更高效):
new BigInteger("111111111111111111111111111111"); // as many 1s as you want
或者,概括地说:
char[] ones = new char[n];
Arrays.fill(ones,'1');
BigInteger genL = new BigInteger(new String (ones));
Math.pow
返回一个双精度值,不能保证大数值的精确性
在此情况下,<代码>数学.POW(10, 23)返回<代码> 1 000000000000000 1E23 ,当转换为BigInteger时,它变为<代码> 10000 000 000 000 01000000 ,从而导致<<代码> 0 /代码>中。
我建议您将Math.pow(10,I)
替换为biginger.TEN.pow(I)
。您应该按如下方式使用我的代码,效果非常好
BigInteger i = new BigInteger("0");
BigInteger ten = new BigInteger("10");
BigInteger one = new BigInteger("1");
for (int j = 0; j < 64; j++) {
i = i.multiply(ten).add(one);
System.out.println(i);
}
BigInteger i=新的BigInteger(“0”);
BigInteger十=新的BigInteger(“10”);
BigInteger one=新的BigInteger(“1”);
对于(int j=0;j<64;j++){
i=i.乘(十)加(一);
系统输出打印LN(i);
}
只打印一个简单的字符串,并在末尾添加“1”会简单得多。只是为了记录:当您要打印像1、11、111这样的字符串时,只需将它们视为字符串。从“1”开始,并继续在其后面添加“1”。那么无论如何,打印“0”的可能性为零。