这是我的java代码:
import java.util.Scanner;
import java.math.*;
abstract class ccFctrl {
public static long countZero(BigInteger a){
long noOfZero=0;
long b;
do{
b =noOfZero;
if(a.remainder(BigInteger.TEN)==BigInteger.ZERO){
noOfZero++;
}
a.divide(BigInteger.TEN);
}while((noOfZero!=0)&&(noOfZero!=b));
return noOfZero;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner s=new Scanner(System.in);
int numOfFctrlsToCalculat=s.nextInt();
BigInteger fctrl=new BigInteger("1");
BigInteger inc=new BigInteger("1");
int num;
long[] count=new long[numOfFctrlsToCalculat];
System.out.println();
for(int i=0;i<numOfFctrlsToCalculat;i++){
num=s.nextInt();
for(int j=1;j<=num;j++){
fctrl=fctrl.multiply(inc);
inc=inc.add(BigInteger.ONE);
}
inc=BigInteger.ONE;
count[i]=countZero(fctrl);
System.out.println();
}
for(int i=0;i<numOfFctrlsToCalculat;i++){
System.out.println(count[i]);
}
s.close();
}
}
编译器上的IDE经常显示错误。只是无法解释为什么代码没有运行
答案 0 :(得分:1)
两件事:
您将在方法countZero中进入无限循环。记住BigInteger是不可变的,所以在相同的操作上,你应该重新分配值:
a = a.divide(BigInteger.TEN);
由于上述情况,您的情况永远不会得到满足,因此会导致无限循环。你应该检查以下条件:
} while (!a.equals(BigInteger.ZERO));
注意旁白:将您的类定义为抽象的任何理由?
答案 1 :(得分:0)
这是known programming contest problem。
例如,描述是here。