阶乘的最高位
阶乘的最高位
题目描述
输入一个正整数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;
}