AcWing 1381阶乘

题目描述:
N 的阶乘(记作 N!)是指从 1 到 N(包括 1 和 N)的所有整数的乘积。

阶乘运算的结果往往都非常的大。

现在,给定数字 N,请你求出 N! 的最右边的非零数字是多少。

例如 5!=1×2×3×4×5=120,所以 5! 的最右边的非零数字是 2。

输入格式

共一行,包含一个整数 N。

输出格式

输出一个整数,表示 N! 的最右边的非零数字。

数据范围

1≤N≤1000

输入样例:

7

输出样例:

4
#include <iostream>
#include <cstdio>

using namespace std;

int n;
int sum;
/*
刚开始犯了一个错误,就是把最右边结果不为0的数
算成当前数的与前一个阶乘的个位数相乘的结果,然后再取个位数,
看了题解发现其实最右边一个不为零的数不一定是个位相乘的结果,
如 15 * 16 = 240 但是 5 * 6 = 30

*/

int main()
{
    scanf("%d", &n);
    sum = 1;
    for(int i = 1; i <= n; i++)
    {
        sum *= i;
        while(sum % 10 == 0)
        {
            sum /= 10;
        }
        sum = sum % 1000; // 不能写成%10
    }
    printf("%d\n", sum % 10);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44620183/article/details/113539667