题目链接在此
用log函数用把乘法转换为加法。
n! < 2^bits ==> log(1) + log(2) + … + log(n) < bits * log(2)
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int year;
while (cin >> year && year) {
double bits = pow(2.0, 2 + (year - 1960) / 10);
double top = bits * log(2);
int n = 1;
double sum = 0;
while (sum < top) {
n++;
sum += log(n);
}
cout << n - 1 << endl;
}
return 0;
}

本文介绍了一种利用对数函数将阶乘计算中的乘法操作转换为加法操作的方法,通过这种方式可以有效减少计算过程中的溢出风险,并提供了一个具体的C++实现示例。
175

被折叠的 条评论
为什么被折叠?



