HDU 1018 Big Number(阶乘位数计算)
2017-11-24 13:43
363 查看
整数n的位数的计算方法为:log10(n)+1
故n!的位数为log10(n!)+1
如果仅仅是求阶乘的位数,用斯特林(Stirling)公式求解
斯特林(Stirling)公式:
n!的位数就是求log10((2*PI*n)^1/2*(n/e)^n)+1
即 1/2*log10(2*PI*n)+n*log10(n/e)+1
这题解决后可以尝试1042 n!
#include<stdio.h>
#include<math.h>
#define PI 3.141592654
#define E 2.71828182846
int l(int n)
{
int s=1;
if(n>3)
s=log10(2*PI*n)/2+n*log10(n/E)+1;
return s;
}
int main(void)
{
int T, m;
scanf("%d", &T);
while (T--) {
scanf("%d", &m);
printf("%d\n", l(m));
}
return 0;
}
故n!的位数为log10(n!)+1
如果仅仅是求阶乘的位数,用斯特林(Stirling)公式求解
斯特林(Stirling)公式:
n!的位数就是求log10((2*PI*n)^1/2*(n/e)^n)+1
即 1/2*log10(2*PI*n)+n*log10(n/e)+1
这题解决后可以尝试1042 n!
#include<stdio.h>
#include<math.h>
#define PI 3.141592654
#define E 2.71828182846
int l(int n)
{
int s=1;
if(n>3)
s=log10(2*PI*n)/2+n*log10(n/E)+1;
return s;
}
int main(void)
{
int T, m;
scanf("%d", &T);
while (T--) {
scanf("%d", &m);
printf("%d\n", l(m));
}
return 0;
}
相关文章推荐
- HDU--1018--Big number!(计算阶乘结果的位数)
- hdu 1018 计算一个数阶乘的位数
- HDU 1018 Big Number【阶乘位数】
- HDU 1018 Big Number (阶乘位数)
- hdu 1018 Big Number(求阶乘的位数)
- hdu 1018 Big Number (求一个数的阶乘的位数,公式!!!)
- hdu 1018 Big Number (求一个数的阶乘的位数,公式!!!)
- hdu 1018 -Big Number(求n的阶乘的位数)
- hdu(1018)Big Number(阶乘位数的计算)
- HDU 1018 Big Number 计算N!的位数
- HDU1018 Big Number(求阶乘位数)
- HDU_1018_n(1e7)的阶乘的结果的位数
- HDU1018_求数的阶乘位数
- Hdu 1018 Big Number 求N!的位数
- HDU 1018 Big Number (数的阶乘的长度:数学)
- hdu1018——Big Number(大数阶乘,斯特林公式)
- 求位数 hdu 1018 Big Number
- ACM--大数阶乘位数--HDOJ 1018--Big Number--水
- hdoj1018_Big Number(大数阶乘位数)
- HDU 1018 求阶乘的位数