阶乘的最高位
题目描述
输入一个正整数n。输出n!的最高位上的数字。
输入
输入一个正整数n(n不超过1000)。
输出
输出n!的最高位上的数字。
样例输入
1000
样例输出
4
解
这道题要是求阶乘的后三位或者后几位,大家肯定都会。
求最高位的值,
其实我们还是按照求后几位的值类似的思路,不过这次是整除,并用double类型存储结果
每次我们对阶乘结果大于10的话循环除以10,这样才能在保证最高位不丢的情况下继续下去,且不溢出
当数据规模足够大时,其内部运算的结果就是低位的数逐渐因为精度的问题损失,而不影响最高位的存储
这里其内部的原因还有点涉及到计算机组成原理浮点数表示的知识,有兴趣的可以了解一下
关键点就两个: double类型存储阶乘结果,注意不要溢出
#include<bits/stdc++.h>
using namespace std;
int main() {
double sum = 1;
int n;
cin >> n;
for(int i = 1; i <= n; i++) {
sum *= i;
while(sum >= 10)
sum /= 10;
}
cout << (int)sum << endl;
return 0;
}