思路分析:
求大数阶乘位数问题,如果n较大的时候,n!必然是一个很大的数。
任意一个数a的位数等于long10(a)+1
推导过程如下:
如果 10^(x-1)<=a<10^x,则a必然是一个x位数。
则 ln(10^(x-1))<=ln(a)<ln(10^x),即x-1<=ln(a)<x,则(int)ln(a)=x-1,得到x=(int)ln(a)+1。
所以a的位数是(int)ln(a)+1。
假设A=n!=1*2*3*……*n=(int)ln(1*2*3*……*n)+1=(int)(ln(1)+ln(2)+ln(3)+……+ln(n))+1。
所以n!=(int)(ln1+ln2+……+lnn)+1
代码:
#include<stdio.h>
#include<math.h>
int main() { int n; scanf("%d",&n); while(n--) { int m,i; double sum=0; scanf("%d",&m); for(i=1;i<=m;i++) { sum+=(log10(i)); } printf("%d\n",(int)sum+1); } return 0; }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。