Факториал (код шеф-повара)

0

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

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

[здесь Т нет. тестовых примеров, N - это число, а z выводится]

#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;
    }
}

мой код python (который работает нормально)

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_ спасибо, что поправили меня :)
Теги:

2 ответа

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 :)
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;
} 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню