阶乘的最高位
题目描述
输入
输出
样例输入
1000
样例输出
4
提示
来源
错误代码
#include<stdio.h>
int main()
{
int n,i,s=1,j,a=0,k,g=1,y;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s=s*i;
}
j=s;
if(j<10)
{
printf("%d",j);
}
else
{
while(j>=1)
{
j=j/10;
a++;
}
for(k=1;k<a;k++)
{
g=g*10;
}
y=s/g;
printf("%d",y);
}
}
错误原因
没有注意数据溢出问题,long long int 也不能存放
思路:每次取所求得阶乘的最高位
正确代码
#include<stdio.h>
int main()
{
int n,i,j;
double s=1.0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
s=1.0*s*i;
while(s>=10)
{
s=s/10;
}
}
printf("%.0lf\n",s);
return 0;
}
|