找回密码
 中文实名注册
查看: 227|回复: 1

1172: 【USACO】阶乘

[复制链接]

699

主题

1090

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22078
发表于 2022-7-3 19:33:08 | 显示全部楼层 |阅读模式
题目描述
阶乘的定义如下: N! = 1 * 2 * 3 * ... * N-1 * N 例如, 12! = 1*2*3*4*5*6*7*8*9*10*11*12 = 479001600 最右的非0位是6,后面有2个0。 写一个程序计算N!最右非0位和末尾的0的个数。
输入
一个整数N, 1 <= N <= 1,000,000
输出
一行输出2个整数:最右非0位,末尾0的个数。
样例

输入
12
输出
6 2

回复

使用道具 举报

699

主题

1090

帖子

2万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
22078
 楼主| 发表于 2022-7-4 10:38:05 | 显示全部楼层
[C++] 纯文本查看 复制代码
#include <bits/stdc++.h>
#define MAXN 10000
 
int main(){
    int n, m = 1;      // 1 <= n <= 1000000
    int zeroCnt = 0, lastNum = 1;
    scanf("%d", &n);
    while(n){
        int t = n;
        while( t % 5 == 0 ){
            t /= 5;
            ++zeroCnt;  //0的位数
        }
 
        lastNum *= n;
        while(lastNum % 10 == 0)
            lastNum /= 10;     //处理lastNum 末尾零
        lastNum %= MAXN;
        --n;
    }
 
    printf("%d %d", lastNum % 10, zeroCnt);
    //system("pause"); //让程序暂停一下,然后按任意键继续
    return 0;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 中文实名注册

本版积分规则

小黑屋|东台市机器人学会 ( 苏ICP备2021035350号-1;苏ICP备2021035350号-2;苏ICP备2021035350号-3 )

GMT+8, 2024-11-1 08:03 , Processed in 0.039282 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表