UVa 10916 Factstone Benchmark
2010-03-04 16:52
363 查看
/* coder:ACboy date: 2010-3-4 result: AC description: UVa 10916 Factstone Benchmark */ #include <iostream> #include <cmath> using namespace std; int main() { int years; #ifndef ONLINE_JUDGE freopen("10916.txt", "r", stdin); #endif while (cin >> years) { if (years == 0) break; else { int k = (years - 1960) / 10; int bit = 4; while (k--) { bit *= 2; } // 刚开始的时候用位运算计算能存储的最大值,但是bit的最大值可能是2的20次方 // 1 << bit的最大值根本就放不进去。 // double max = 1 << bit; double max = bit * log(2.0); double N = 0; double i; for (i = 1; ; i++) { N += log(i); if (N > max) break; } cout << i - 1 << endl; } } return 0; }
因为bit的值的最大值为220 所以不能把能表示的最大值(2的220次方)存储在语言
的任何内置类型中,考虑一下用大整数,但是有点麻烦。有没有其他的方法呢???
先看看本题如何求解,题目的要求是i!能够放在bit位二进制的表示的整数中求i的最
大值。本题的技巧在于要使用log函数即以e为底的对数,由对数的性质我们可以知道
ln(N!) = ln(1) + ln(2) + ... + ln(N); 而我们可以对能表示的数取对数即ln(2bit) =
bit * ln(2)。所以问题的求解就是找到第一个i使得ln(i!) 大于bit * ln(2),则结果为
i - 1。
相关文章推荐
- uva 10916 Factstone Benchmark
- uva 10916 Factstone Benchmark
- UVA-10916 Factstone Benchmark
- uva 10916 Factstone Benchmark(对数函数的活用)
- uva-10916 - Factstone Benchmark
- UVa 10916 - Factstone Benchmark
- Uva 10916 Factstone Benchmark
- UVA 10916 Factstone Benchmark
- UVA - 10916 Factstone Benchmark
- Uva 10916 - Factstone Benchmark
- UVA10916- Factstone Benchmark
- uva 10916 Factstone Benchmark(对数函数的活用)
- UVA - 10916 Factstone Benchmark
- UVa 10916 Factstone Benchmark
- UVA 10916 Factstone Benchmark
- UVA - 10916 Factstone Benchmark(数学)
- UVa 10916 Factstone Benchmark (数学&阶乘的处理技巧)
- uva 10916 Factstone Benchmark(打表)
- UVA 10916 Factstone Benchmark
- uva 10916 - Factstone Benchmark