1.タイトル
Nの階乗(N!として示される)は、1からN(1とNを含む)までのすべての整数の積を指します。
階乗演算の結果は、多くの場合非常に大きくなります。
さて、数Nが与えられたら、Nの右端の非ゼロ数を見つけてください!
たとえば、5!= 1×2×3×4×5 = 120であるため、ゼロ以外の右端の5!の数は2です。
入力形式は
1行で、整数Nが含まれています。
出力形式
N!の右端の非ゼロ数を表す整数を出力します。
データ範囲
1≤N≤1000
入力例:
7
出力例:
4
2.分析
データを観察すると、ルールを見つけることができます。数値n
の階乗n!
の末尾に1
1つ以上が含まれている場合、必要なのはゼロ以外の右端であるため、最終結果に影響を与えない0
末尾0
の部分を削除できます。n!
数。
このようにn!
、を解くとき、私たちは常に数値が10
整数であるかどうかを判断し、整数である場合は、最後の0
ビットを削除します。(m = n!)
これは while(m%10==0) m/=10
しかし、これはまだ十分ではなく、n!
それでも大きく、long long
範囲を超えるため、現時点ではn!
、最後のn
ビットを取るという有効な部分のみを保持することを検討する必要があります。
検証は、n
服用3
に6
間可能です。計算のために最後の3ビットを保持します。
これは m%=1000
3.ACコード
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int m = 1;
for (int i = 1; i <= n; i++)
{
m *= i;
while (m % 10 == 0) m /= 10; // 去除末尾为0的位
m %= 1000; //保留后三位
}
cout << m % 10 << endl;
return 0;
}