小白 代码成长路 阶乘

70 阅读1分钟
微信图片_20231018114914.png

求某个数的阶乘位数用log10(n)+1,不要忘记头文件#include<math.h>

一开始我的思路是通过循环先求出n阶乘的具体数字,如下

#include<stdio.h>
#include<math.h>
int main()
{
	int n;
	scanf("%d",&n);
	if(n==0||n==1){
		printf("1");
		return 0;
	}
	int  sum=1; 
	for(int i=2;i<=n;i++){
		sum*=i;
	}
	int len=log10(sum)+1;
	printf("%d",len);
	return 0;
}

当n数字小时,输出的答案位数是正确的,当n稍微大一点就会越界,这里n的范围为[0,106]这里n的范围为[0,10^6]

最后要用数学思维方法去总结规律 正整数的位数为lgx+1正整数的位数为lg(x)+1

lgn!)+1=lg12n=lg1+lg2+lgn+1lg(n!)+1=lg(1*2*……*n)=lg(1)+lg(2)……+lg(n)+1

由以上思路我们可以编写如下代码

#include<stdio.h>
#include<math.h>
int main()
{
	int n;
	scanf("%d",&n);
	if(n==0||n==1){
		printf("1");
		return 0;
	}
	double  sum=0; 
	for(int i=2;i<=n;i++){
		sum+=log10(i);
	} 
	int p=sum;
	printf("%d",p+1);
	return 0;
}

小白刚入坑,写得不好请见谅,欢迎各位大佬的建议