注册 登录
编程论坛 C++教室

请教【CPP1-6.考6】奇偶阶乘

yiyanxiyin 发布于 2023-08-11 10:48, 608 次点击
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

测试数据都过了, 但递交评测不过
程序代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
    int n;
    int cnt = 0;
    cin>> n;
    //阶乘
    for(int i = 1;i <= n;i++){
        if(i % 5 == 0){
            cnt++;
        }
    }
    cout<< cnt <<" ";
    cnt=0;
    //奇偶阶乘
    if(n % 2 == 0){//偶数
        for(int i=2 ;i<=n;i+=2){
            if(i % 5 == 0){
                cnt++;
            }
        }
    } else {//奇数
        cnt=0;
    }


    cout<< cnt;
}


不知道哪里有问题
3 回复
#2
rjsp2023-08-11 11:36
第一个
        if(i % 5 == 0){
            cnt++;
        }

就不对,比如 25,它是 5*5,那么它能提供两个0。
25! 的尾部有6个0,你看看你的代码输出多少?
#3
rjsp2023-08-11 11:44
我随手写一个,没条件测试,仅供参考

程序代码:
#include <iostream>
using namespace std;

int main( void )
{
    unsigned n;
    cin>> n;

    // n!
    {
        unsigned cnt = 0;
        for( unsigned t=n; t!=0; t/=5 )
            cnt += t/5;
        cout << cnt << ' ';
    }

    // n!!
    {
        unsigned cnt = 0;
        if( n%2 == 0 ) // 偶数
        {
            for( unsigned t=n; t!=0; t/=10 )
                cnt += t/10;
        }
        cout << cnt << '\n';
    }
}
#4
zbjzbj2023-08-11 17:08
楼主把算法改一下:
统计n中含因子2和5的个数,累计一下,最后按2或者5个数中少的一个输出。
1