2014-12-15 5 views
-3

это мой 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

Какой вклад вы даете? – NPE

+0

OK, явная ошибка: 'a.divide (BigInteger.TEN);' должен быть 'а = a.divide (BigInteger.TEN);' , как BigInteger неизменен – traylz

ответ

1

Две вещи:

  • Вы собираетесь в бесконечный цикл в вашем методе CountZero. Помните BigInteger неизменна, так что делает работу на том же, вы должны передать значение как:

    a = a.divide(BigInteger.TEN); 
    
  • Ваше состояние никогда не будет удовлетворен из-за выше, и, следовательно, приведет к бесконечному циклу. Вы должны проверить ниже условия:

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

Примечание: Помимо причин для определения вашего класса в качестве реферата?

+0

фактически codechef не принимал код с общественными класс, поэтому мне пришлось изменить модификатор. перед этим он показывал ошибку компилятора. – da6932

+0

Хорошо .. если вы считаете, что можете получить то, что вам нужно, лучше закройте этот вопрос, приняв ответ, чтобы другие могли использовать его позже, если они столкнулись с подобной проблемой. – SMA

+0

хорошо ... спасибо большое – da6932

Смежные вопросы