C语言怎么计算大数阶乘的结果的位数

比如3!=6,结果位数就是1,4!=12,位数就是2

第1个回答  2019-04-09
#include <cstdio>
#include <cmath>

#define pi 3.14159265
#define e 2.718281828

int main()
{
int n,num;//所求为n!的位数,num为位数
scanf("%d",&n);

if(n==0)
{
num=1;
}
else
{
num=(int)((0.5*log(2*pi*n)+n*log(n)-n)/log(10))+1;
}

printf("%d",num);
}

使用斯特林公式,n!约等于sqrt(2*pi*n)*(n/e)^n,如不理解需更多信息或者有使用高精度(long long不够)的需求继续追问

本回答被提问者和网友采纳
第2个回答  2019-04-09
#include <stdio.h>
void main()
{
int i,n;
long sum=1;
scanf("%d",&n);
for(i=n;i>0;i--)
sum*=i;
printf("%d!=%d\n",n,sum);
long j=sum;
while(j/=10)
i++;
i++;
printf("%d的位数为%d\n",sum,i);
}
除以一次10 ,位数加一次,括号条件为0时,为假,循环自动跳出。
最后一次首位数 除以10为假跳出,但不能忽略,所以i要再加一次

追问

好像这个只能计算n不太大的情况,太大了还是无法进行。我遇到的题中有n取几万几十万的测试数据,通不过吧

第3个回答  2021-04-21

C语言字符串的学习,输入指定字符串,并且计算字符串的位数

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网