Factorial(代码厨师)

时间:2014-02-01 08:00:56

标签: c++

请有人帮我找到此代码中的错误。我的python对应工作正常,但是当我用c ++编写代码时,给出值(N)> = 5给我一个无限循环。

  

[在这个问题上,你必须找到没有。在给定数字的阶乘中的尾随零值

     

[这里T不是。测试用例,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

2 个答案:

答案 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;
            }
        }
    }

答案 1 :(得分: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;
}