UVA10916- Factstone Benchmark

计算 n的最大值,2^n>n!,如果一直整数相乘的话,会越界,所以要取对数。

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;

int main(){
	int n, i;
	double m, sum;
	while (scanf("%d", &n) && n){
		m = pow(2, (n - 1940) / 10) * log(2);
		sum = 0;
		for(int i = 1; ; i++){
			sum += log(i);		
			if (sum > m){
				printf("%d\n", i - 1);	
				break;	
			}	
				
		}
	}
	return 0;
}


你可能感兴趣的:(UVA10916- Factstone Benchmark)