用C语言编一个程序: 计算100!的整型值结果和这个结果的位数。输出时每行输出50个数字。

作者&投稿:孙勇 (若有异议请与网页底部的电邮联系)
#include <stdio.h>
int main()
{
char ra[10000]={0};
ra[0]='1';
int n;
int j;
int t;
int l;
printf("请输入一个数:");
scanf("%d",&n);

for(int i=1;i<=n;i++)
{
for(l=0;ra[l];l++);

for(j=l-1;j>=0;j--)
{

t=(ra[j]-'0')*i;
ra[j]=t%10+'0';
t=t/10;

for(int jf=1;t;jf++)
{

if(ra[j+jf]==0)
{
ra[j+jf]='0';
}
ra[j+jf]=ra[j+jf]+t%10;
t=t/10;
if(ra[j+jf]>'9')
{
ra[j+jf]-=10;
t++;
}

}
}
}
for(l=0;ra[l];l++);
printf("%d的阶乘有%d位\n",n,l);
for(t=1,l=l-1;l>=0;l--,t++)
{
printf("%c",ra[l]);
if(t%50==0)
printf("\n");
}
printf("\n");
return 0;
}

请输入一个数:100
100的阶乘有158位
93326215443944152681699238856266700490715968264381
62146859296389521759999322991560894146397615651828
62536979208272237582511852109168640000000000000000
00000000
请按任意键继续. . .

#include<stdio.h>
void main()
{
int a[1000], i, j, t=0;
for(j=0; j<1000; j++) a[j]=0;
a[0]=1;
for(i=1; i<=100; i++)
for(j=0; j<1000; j++)
{
a[j]=a[j]*i;
a[j]=a[j]+t;

t = a[j]/10;
if(a[j]>=10)
{

a[j]=a[j]%10;

}

}
i=999;
while(a[i]==0) i--;
printf("有%d位\n",i+1);

for(j=i, t=1; j>=0; j--, t++)
{
printf("%d", a[j]);
if(t%50==0) printf("\n");

}

}

#include<stdio.h>
main()
{ unsigned long int sum=1,j;
int i;
for(i=1;i<101;i++){ sum*=i)
j=sum;i=0;
do{ sum/=10;i++;}while(sum==0)
printf("100!=%d,一共有%d位。",j,i);
}
每行输出50个数字还真不好搞。不过这个数据有可能太大,不知道能不能够表示。
满意请选择为满意答案。

计算好算,就是不会求位数

C语言只有整型数的运算~

不是的~~

对于a/b的结果是整型的

而对于sqrt(a),它的返回值是double型的
如b = sqtr( a ) ;编译器会提示此处有警告

这是由于函数的定义时,已经规定好的~~

D 取余,又叫取整