错误---模数不正确
BigInteger正在考虑vaule 0或-ve,但我无法弄明白
public int[] conCheck(BigInteger big)
{
int i=0,mul=1;
int a[]= new int[10];
int b[]= new int[10];
BigInteger rem[]= new BigInteger[11];
BigInteger num[]= new BigInteger[11];
String s="100000000";//,g="9";
//for(i=0;i<5;i++)
//s=s.concat(g);
BigInteger divi[]= new BigInteger[11];
divi[0]=new BigInteger(s);
num[0]=big;
for(i=0;i<10;i++)
{
int z = (int)Math.pow((double)10,(double)(i+1));
BigInteger zz = new BigInteger(String.valueOf(z));
divi[i+1]=divi[i].divide(zz);
num[i+1]=num[i].divide(zz);
}
{ for(i=0;i<10;i++)
{
rem[i] = num[i].mod(divi[i]);
b[i]=rem[i].intValue();
if(i>=4)
{
mul= b[i]*b[i-1]*b[i-2]*b[i-3]*b[i-4];
}
a[i]=mul;
}
}
return a;
}
在控制台上出错
C:\jdk1.6.0_07\bin>java euler/BigConCheck1
Exception in thread "main" java.lang.ArithmeticException: BigInteger: modulus no
t positive
at java.math.BigInteger.mod(BigInteger.java:1506)
at euler.BigConCheck1.conCheck(BigConCheck1.java:31)
at euler.BigConCheck1.main(BigConCheck1.java:65)
答案 0 :(得分:6)
你正在划分大整数。
让我们看看你的循环中计算了divi
的值:
i divi[i] zz divi[i+1]
0 100000000 10 10000000
1 10000000 100 100000
2 100000 1000 100
3 100 10000 0
4 0 100000 0
5 0 1000000 0
6 0 10000000 0
7 0 100000000 0
8 0 1000000000 0
9 0 10000000000 0
然后你尝试用divi [4](= 0)划分一些东西,这显然会因你发布的异常而失败。
答案 1 :(得分:3)
看一下mod方法的定义。
如果m&lt; = 0。
,它会在public BigInteger mod(BigInteger m)
中抛出ArithmeticException
m是0.这就是你得到例外的原因。
答案 2 :(得分:0)
这意味着它所说的,模数(右手边的数字)不能是负数。它必须大于0