N!的位数
2018-06-18 04:15:57来源:未知 阅读 ()
1)Description:
N! (N的阶乘) 是非常大的数,计算公式为:N! = N * (N - 1) * (N - 2) * ... * 2 * 1)。现在需要知道N!有多少(十进制)位。
input:每行输入1个正整数N。0 < N < 1000000
output:对于每个N,输出N!的(十进制)位数。
input:32000 1000000
2)算法分析:
对于任意一个给定的正整数a, 假设10^(x-1)<=a<10^x,那么显然a的位数为x位,又因为log10(10^(x-1))<=log10(a)<(log10(10^x)) 即x-1<=log10(a)<x 则(int)log10(a)=x-1, 即(int)log10(a)+1=x 即a的位数是(int)log10(a)+1,我们知道了一个正整数a的位数等于(int)log10(a) + 1,现在来求n的阶乘的位数:假设A=n!=1*2*3*......*n,那么我们要求的就是(int)log10(A)+1,而log10(A)=log10(1*2*3*......n) (根据log10(a*b) = log10(a) + log10(b)有)=log10(1)+log10(2)+log10(3)+......+log10(n)所以n的阶乘的位数等于(int)(log10(1)+log10(2)+log10(3)+......+log10(n)) + 1 int n,i;
double a;
while(scanf("%d",&n)!=EOF)
{
a=0;
for(i=1;i<=n;i++)
{
a=a+(log10(i));
}
printf("%d\n",(int)a+1);
}
}
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 寻找两个有序数组的中位数 2020-04-09
- L1-013 计算阶乘和 (10分) 2020-03-24
- 用C++实现:高精度阶乘 2020-03-18
- 序列归并 2020-02-19
- 全排列2 2020-02-02
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash