比如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);
}
#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要再加一次追问
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语言字符串的学习,输入指定字符串,并且计算字符串的位数