UVA - 10916 Factstone Benchmark

来源:互联网 发布:广州新科佳都科技 知乎 编辑:程序博客网 时间:2024/06/05 16:15

题目大意:从 1960 年开始,每十年位数翻一倍,最开始是 4bit,求最大的 n 使得 n!小于当前电脑位数所能表示的最大无符号整数。如 1960 年 4bit,所能表示的最大整数为 2^4=16。
1!=1,2!=2,3!=6,4!=24。
当 n=4,n! 大于 15,所以 n=3。

解题思路:根据题意即求 1×2×3×4×…×n < 2^bit,显然直接去求会溢出。两边取对数去求。

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>using namespace std;int main() {    int y, n;    while(scanf("%d", &y) != EOF && y) {        int bit = pow(2,((y - 1960) / 10 + 2));        double sum = 0;        for (int i = 2; ; i++) {            sum += log(i)/log(2);            if (bit < sum) {                n = i-1;                break;            }        }    printf("%d\n", n);    }    return 0;}
0 0