鏈接:https://ac.nowcoder.com/acm/contest/75/A
來源:牛客網
題目描述
夫夫有一天對一個數有多少位數感興趣,但是他又不想跟凡夫俗子一樣,
所以他想知道給一個整數n,求n!的在8進制下的位數是多少位。
輸入描述:
第一行是一個整數t(0<t<=1000000)(表示t組數據) 接下來t行,每一行有一個整數n(0<=n<=10000000)
輸出描述:
輸出n!在8進制下的位數。
示例1
輸入
3 4 2 5
輸出
2 1 3
思路
斯特林公式:
這道題的時間限制一直到了輸出,所以在最開始定義pi和e的時候就不能簡單的定義爲一個小數,pi=acos(-1.0),e=exp(1.0)。
代碼
#include <stdio.h>
#include <iostream>
#include <math.h>
using namespace std;
const double pi=acos(-1.0);
const double e=exp(1.0);
int main()
{
int n,m,sum;
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
if(m<2)
printf("1\n");
else
printf("%d\n",(int)((log(2.0*pi*m)/log(8)/2.0 + m*log(m/e)/log(8))+1));
}
return 0;
}