http://acm.hdu.edu.cn/showPRoblem.php?pid=1141
有个公司研制计算机芯片,1960年发布4位的,1970年发布8位的,1980年发布16位的……每十年位数翻倍。假设芯片储存无符号整数,给定一个日期,问当年的最新芯片最大可以储存的阶乘是几的阶乘
实际就是求n! <= 2^x中的n,但显然这两个数的范围很大,不能直接表示,可以对两数同时取对数,就很简单了
#include <bits/stdc++.h>using namespace std;const int N = 210;int arr[N];int main(){ arr[0] = 4; for(int i = 1; i <= 25; i++) arr[i] = 2 * arr[i-1]; int n; while(scanf("%d", &n), n) { int tm = arr[(n-1960)/10]; double sum = 0.0; int res; for(int i = 1; ; i++) { sum += log(1.0*i) / log(2.0); if(sum <= tm) res = i; else break; } printf("%d/n", res); } return 0;}新闻热点
疑难解答