欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【指数变为对数+理解题目】HDU-1141 Factstone Benchmark

程序员文章站 2022-04-06 13:50:09
...

【指数变为对数+理解题目】HDU-1141 Factstone Benchmark
【指数变为对数+理解题目】HDU-1141 Factstone Benchmark
1、理解题目:从1960开始,每十年,翻一倍,1960年是4位,1970年是8位,1980年是16位,1990年是32位,2000年是64位。给定一个年份,就已知其对应的位数,要求的是最大数n,使得n!小于该位数。
2、翻译过来就是1 * 2 * … * n < 2 的 (year-1960)/10+2 次方。由于指数爆炸,数字太大,因此把指数转换为对数,得出(log表示以2为底,而C++中的log()是以10为底,因此要再使用换底公式,log1=log(1.0)/log(2.0):log1+log2+…+logn < (year-1960)/10+2,求出n即可。

代码

#include <iostream>
#include <cmath>

using namespace std;

int main() {

	int N;
	cin>>N;
	while(N) {
		int bit = (N - 1960) / 10 + 2;
		bit = 1 << bit;
		double ans = 0.0;
		int i = 1;
		while(ans<bit) {
			ans += log(double(++i)) / log(2.0);
		}
		cout<<(i-1)<<endl;
		cin>>N;
	}

	return 0;
}

结果

【指数变为对数+理解题目】HDU-1141 Factstone Benchmark

相关标签: hdu