AcWing 1381. 阶乘
原题链接
简单
作者:
殇ベ_11
,
2021-03-13 08:38:45
,
所有人可见
,
阅读 258
题目描述
N 的阶乘(记作 N!)是指从 1 到 N(包括 1 和 N)的所有整数的乘积。
阶乘运算的结果往往都非常的大。
现在,给定数字 N,请你求出 N! 的最右边的非零数字是多少。
例如 5!=1×2×3×4×5=120,所以 5! 的最右边的非零数字是 2。
输入格式
共一行,包含一个整数 N。
输出格式
输出一个整数,表示 N! 的最右边的非零数字。
数据范围
### 1≤N≤1000
样例
输入样例:
### 7
输出样例:
### 4
算法1
C++ 代码(自打代码)
#include<bits/stdc++.h>
using namespace std;
int n;
int main()
{
int res = 1;
scanf("%d",&n);
for(int i = 1;i <= n; i ++){
res = res * i;
while(res % 10 == 0){
res = res / 10;
}
res = res % 1000;
}
printf("%d",res % 10);
return 0;
}
算法2(y总代码)
C++ 代码
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
int res = 1,d2 = 0,d5 = 0;
for(int i = 1;i <= n;i ++){
int x = i;
while(x % 2 == 0) x /= 2, d2 ++;
while(x % 5 == 0) x /= 5, d5 ++;
res = res * x % 10;
}
int k = min(d2, d5);
for(int i = 0;i < d2 - k; i++) res = res * 2 % 10;
for(int i = 0;i < d5 - k; i++) res = res * 5 % 10;
cout<< res << endl;
return 0;
}