HDOJ 1018(階乘位數)

2022-01-28 17:55:07 字數 664 閱讀 5319

1.log10(num)+1

2.較小數情況下,sprintf(str,"%d",num);輸出strlen(str),所以不能初始化為0

自然對數:log()  ,以二為底log2(num)=log(num)/log2,因為那個自然對數的底是無理數,不好表示,只要有了自然對數的表示,其他用換底公式就ok啦

我一直想的是求出階乘後,再strlen(str),其實求階乘位數有乙個公式

//lnn!=nlogn-n+0.5*log(2*pi*n)

#include

#include

#define pi 3.14159265

int num,ans;

void count_factorial()

double t;

t = (num*log(num) - num + 0.5*log(2*num*pi))/log(10);

ans= (int)t+1;

printf("%d\n",ans);

int main()

int i,n;

scanf("%d",&n);

for( i=1 ; i<=n ; i++ )  

scanf("%d",&num);

count_factorial();

return 0;

3.

HDU 1018 階乘位數 數學

題意是求 n 的階乘的位數。直接求 n 的階乘再求其位數是不行的,開始時思路很扯淡,想直接用乙個陣列存每個數階乘的位數,用變數 tmp 去存 n 與 n 1 的階乘的最高位的數的乘積,那麼 n 的階乘的位數就等於 n 1 的階乘的位數加 tmp 的位數再減去 1。但這種做法是不對的,例如有可能最高位...

JoyOI1018 階乘統計

時間限制 記憶體限制 評測方式 題目 1000ms 131072kib 標準比較器 local 太原成成中學第2次模擬賽 第一道 n的階乘定義為n 123 n 如3 6 n 通常最後會有很多0,如5 120 最後有乙個0,現在統計n 去除末尾的0後,最後k位是多少 第一行包括兩個數n,k 如果n 不...

hdu 1018 計算乙個數階乘的位數

input input consists of several lines of integer numbers.the first line contains an integer n,which is the number of cases to be tested,followed by n ...