找出大因子n计算最后的零数

时间:2014-12-15 09:30:55

标签: java

这是我的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经常显示错误。只是无法解释为什么代码没有运行

2 个答案:

答案 0 :(得分:1)

两件事:

  • 您将在方法countZero中进入无限循环。记住BigInteger是不可变的,所以在相同的操作上,你应该重新分配值:

    a = a.divide(BigInteger.TEN);
    
  • 由于上述情况,您的情况永远不会得到满足,因此会导致无限循环。你应该检查以下条件:

    } while (!a.equals(BigInteger.ZERO));
    

注意旁白:将您的类定义为抽象的任何理由?

答案 1 :(得分:0)

这是known programming contest problem

例如,描述是here