2014-02-01 4 views
0

пожалуйста, помогите мне найти ошибку в этом коде. У меня есть его python-копия, которая работает нормально, но когда я кодирую это в C++, значение (N)> = 5 дает мне бесконечный цикл.Factorial (code chef)

[в этой проблеме вы должны найти нет. конечных нулей в факториале заданного числа]

[здесь T нет. тестов, N есть число, а г выводится]

#include <iostream> 
using namespace std; 
int main(){ 
long int T,N,Z; 
cin>>T; 
for(int x=0;x<T;x++){ 
    Z=0; 
    cin>>N; 
    for(int y=1;y<=N;y++){ 
     if(y%5==0){ 
      while(y/5!=0 && y%5==0){ 
       Z+=1; 
       y/=5; 
      } 
     } 
    } 
    cout<<Z<<endl; 
    } 
} 

мой питон код (который работает отлично)

T=int(raw_input()) 
for x in range(1,T+1): 
    Z=0 
    N=int(raw_input()) 
    for y in range(1,N+1): 
     if y%5==0: 
      while y/5!=0 and y%5==0: 
       Z=Z+1 
       y=y/5 
    print Z 
+0

БОЛЬШЕ НЕ ТРЕБУЕТСЯ ОТВЕТЫ @dann_ спасибо за исправление меня :) – user3259947

ответ

0

ваша логика не является правильным. Посмотрите на это, что я правильно представил, надеюсь, что это помогает: -

#include<iostream> 
using namespace std; 
int tailing_zero(int n){ 
    int ans=0; 
    int DIV=5; 
     while(n/DIV >0){ 
     ans=ans+n/DIV; 
     DIV=DIV*5; 
    } 
    return ans; 
} 
int main(){ 
    int run_count; 
    cin>>run_count; 
    int input[run_count]; 

    for(int i=0;i<run_count;i++){ 
     cin>>input[i]; 
    } 
    for(int i=0;i<run_count;i++){ 
     cout<<tailing_zero(input[i])<<endl; 
    } 
    return 0; 
} 
1

изменить это:

for(int y=1;y<=N;y++){ 
    int temp=y; 
     if(temp%5==0){ 
      while(temp/5!=0 && temp%5==0){ 
       Z+=1; 
       temp/=5; 
      } 
     } 
    } 
+0

+1 за указание 'y' изменяется внутри' loop' :) –