9个回答
展开全部
100的阶乘已经是大数相乘了,在c语言中没有现成的数据型可以用,所以用数组模拟计算,以下是对楼上程序的解释 #include <stdio.h>
#define MAXN 1000
int a[MAXN],b[MAXN];
void pwrite(int *a,int k,int c)//将计算的结果数组[a]按每一位输出,k为所计算数字,i为计算所得位数,计算后所得结果是按从最后一位到第一位,故应该倒序输出
{
int i;
printf("%4d != ",k);
for(i= c-1;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n\n");
}
void pnext(int k,int *cp);
int main(void)
{
int n,c,k;
printf("Enter the number n(n<=100):");
scanf("%d",&n);
a[0]=1;
c=1; //初始化长度为1,随计算位数增加
/*pwrite(a,1,c);*/
for(k=2;k<=n;k++)
{
pnext(k,&c); //此处计算结果,计算1*2*3*...*n
//pwrite(a,k,c);
if (k==n)
{
pwrite(a,k,c);//计算到n时输出
}
}
system("pause");
return 0;
}
void pnext(int k,int *cp) //cp此处代表计算的位数,n代表将要乘的数字
{
int i, j;
int temp = *cp;
for ( i=0; i<temp; i++ )
{
b[i] = a[i]; //利用b[i]作为暂时记录的数组
}
for ( i=1; i<k; i++ )// add for k-1 times
{
for ( j=0; j<temp; j++ )
{
a[j] += b[j]; //每一位对齐相加,
if ( a[j] > 9 )
{
a[j+1] += a[j]/10;
a[j] = a[j]%10; //如果大于9则进位
if ( j == *cp-1 )// add *cp for only once
{
(*cp)++; //如果是最高位,则自加即可,不必进位
}
}
}
}
while ( a[*cp-1] > 9 )
{
a[*cp] += a[*cp-1]/10;
a[*cp-1] = a[*cp-1]%10;
(*cp)++; //对最高位进行处理,此时n值已变,故应自加
}
}
#define MAXN 1000
int a[MAXN],b[MAXN];
void pwrite(int *a,int k,int c)//将计算的结果数组[a]按每一位输出,k为所计算数字,i为计算所得位数,计算后所得结果是按从最后一位到第一位,故应该倒序输出
{
int i;
printf("%4d != ",k);
for(i= c-1;i>=0;i--)
{
printf("%d",a[i]);
}
printf("\n\n");
}
void pnext(int k,int *cp);
int main(void)
{
int n,c,k;
printf("Enter the number n(n<=100):");
scanf("%d",&n);
a[0]=1;
c=1; //初始化长度为1,随计算位数增加
/*pwrite(a,1,c);*/
for(k=2;k<=n;k++)
{
pnext(k,&c); //此处计算结果,计算1*2*3*...*n
//pwrite(a,k,c);
if (k==n)
{
pwrite(a,k,c);//计算到n时输出
}
}
system("pause");
return 0;
}
void pnext(int k,int *cp) //cp此处代表计算的位数,n代表将要乘的数字
{
int i, j;
int temp = *cp;
for ( i=0; i<temp; i++ )
{
b[i] = a[i]; //利用b[i]作为暂时记录的数组
}
for ( i=1; i<k; i++ )// add for k-1 times
{
for ( j=0; j<temp; j++ )
{
a[j] += b[j]; //每一位对齐相加,
if ( a[j] > 9 )
{
a[j+1] += a[j]/10;
a[j] = a[j]%10; //如果大于9则进位
if ( j == *cp-1 )// add *cp for only once
{
(*cp)++; //如果是最高位,则自加即可,不必进位
}
}
}
}
while ( a[*cp-1] > 9 )
{
a[*cp] += a[*cp-1]/10;
a[*cp-1] = a[*cp-1]%10;
(*cp)++; //对最高位进行处理,此时n值已变,故应自加
}
}
展开全部
#include "stdio.h"
void main()
{int data[200];
int i,j,k;
int n;
int digit;
for(i=0;i<200;i++)
data[i]=0;/*数组初始化全都置0*/
data[1]=1;
digit=1;
printf("input the number n= \n");
scanf("%d",&n);/*你要是求100!就输入100*/
for(i=0;i<n+1;i++)
{
for(j=1;j<digit+1;j++)
{
if(i==0)data[j]=1;
else data[j]*=i;
}
for(j=1;j<digit+1;j++)
{
if(data[digit]>=10)/*若放在后面,就不是判断最后一位了.只有先判断才是最后一位,否则出错*/
digit++;
if(data[j]>=10)
{data[j+1]+=data[j]/10;
data[j]%=10;
}
}
printf("\n%d!= ",i);
for(k=digit;k>0;k--)
printf("%d",data[k]);
}
}
运行结果:
100!=93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
void main()
{int data[200];
int i,j,k;
int n;
int digit;
for(i=0;i<200;i++)
data[i]=0;/*数组初始化全都置0*/
data[1]=1;
digit=1;
printf("input the number n= \n");
scanf("%d",&n);/*你要是求100!就输入100*/
for(i=0;i<n+1;i++)
{
for(j=1;j<digit+1;j++)
{
if(i==0)data[j]=1;
else data[j]*=i;
}
for(j=1;j<digit+1;j++)
{
if(data[digit]>=10)/*若放在后面,就不是判断最后一位了.只有先判断才是最后一位,否则出错*/
digit++;
if(data[j]>=10)
{data[j+1]+=data[j]/10;
data[j]%=10;
}
}
printf("\n%d!= ",i);
for(k=digit;k>0;k--)
printf("%d",data[k]);
}
}
运行结果:
100!=93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include
"stdio.h"
void
main()
{int
data[200];<br>
int
i,j,k;<br>
int
n;<br>
int
digit;<br>
for(i=0;i<200;i++)<br>
data[i]=0;/*数组初始化全都置0*/<br>
data[1]=1;<br>
digit=1;<br>
printf("input
the
number
n=
");<br>
scanf("%d",&n);/*你要是求100!就输入100*/<br>
for(i=0;i<n+1;i++)<br>
{<br>
for(j=1;j<digit+1;j++)<br>
{<br>
if(i==0)data[j]=1;<br>
else
data[j]*=i;<br>
}
for(j=1;j<digit+1;j++)
{
if(data[digit]>=10)/*若放在后面,就不是判断最后一位了.只有先判断才是最后一位,否则出错*/
digit++;
if(data[j]>=10)
{data[j+1]+=data[j]/10;<br>
data[j]%=10;<br>
}
}
printf("
%d!=
",i);
for(k=digit;k>0;k--)
printf("%d",data[k]);
}
}
运行结果:
100!=93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
"stdio.h"
void
main()
{int
data[200];<br>
int
i,j,k;<br>
int
n;<br>
int
digit;<br>
for(i=0;i<200;i++)<br>
data[i]=0;/*数组初始化全都置0*/<br>
data[1]=1;<br>
digit=1;<br>
printf("input
the
number
n=
");<br>
scanf("%d",&n);/*你要是求100!就输入100*/<br>
for(i=0;i<n+1;i++)<br>
{<br>
for(j=1;j<digit+1;j++)<br>
{<br>
if(i==0)data[j]=1;<br>
else
data[j]*=i;<br>
}
for(j=1;j<digit+1;j++)
{
if(data[digit]>=10)/*若放在后面,就不是判断最后一位了.只有先判断才是最后一位,否则出错*/
digit++;
if(data[j]>=10)
{data[j+1]+=data[j]/10;<br>
data[j]%=10;<br>
}
}
printf("
%d!=
",i);
for(k=digit;k>0;k--)
printf("%d",data[k]);
}
}
运行结果:
100!=93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include
"stdio.h"
void
main()
{int
data[200];
int
i,j,k;
int
n;
int
digit;
for(i=0;i<200;i++)
data[i]=0;/*数组初始化全都置0*/
data[1]=1;
digit=1;
printf("input
the
number
n=
\n");
scanf("%d",&n);/*你要是求100!就输入100*/
for(i=0;i<n+1;i++)
{
for(j=1;j<digit+1;j++)
{
if(i==0)data[j]=1;
else
data[j]*=i;
}
for(j=1;j<digit+1;j++)
{
if(data[digit]>=10)/*若放在后面,就不是判断最后一位了.只有先判断才是最后一位,否则出错*/
digit++;
if(data[j]>=10)
{data[j+1]+=data[j]/10;
data[j]%=10;
}
}
printf("\n%d!=
",i);
for(k=digit;k>0;k--)
printf("%d",data[k]);
}
}
运行结果:
100!=93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
"stdio.h"
void
main()
{int
data[200];
int
i,j,k;
int
n;
int
digit;
for(i=0;i<200;i++)
data[i]=0;/*数组初始化全都置0*/
data[1]=1;
digit=1;
printf("input
the
number
n=
\n");
scanf("%d",&n);/*你要是求100!就输入100*/
for(i=0;i<n+1;i++)
{
for(j=1;j<digit+1;j++)
{
if(i==0)data[j]=1;
else
data[j]*=i;
}
for(j=1;j<digit+1;j++)
{
if(data[digit]>=10)/*若放在后面,就不是判断最后一位了.只有先判断才是最后一位,否则出错*/
digit++;
if(data[j]>=10)
{data[j+1]+=data[j]/10;
data[j]%=10;
}
}
printf("\n%d!=
",i);
for(k=digit;k>0;k--)
printf("%d",data[k]);
}
}
运行结果:
100!=93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include
"stdio.h"
void
main()
{int
data[200];
int
i,j,k;
int
n;
int
digit;
for(i=0;i<200;i++)
data[i]=0;/*数组初始化全都置0*/
data[1]=1;
digit=1;
printf("input
the
number
n=
\n");
scanf("%d",&n);/*你要是求100!就输入100*/
for(i=0;i<n+1;i++)
{
for(j=1;j<digit+1;j++)
{
if(i==0)data[j]=1;
else
data[j]*=i;
}
for(j=1;j<digit+1;j++)
{
if(data[digit]>=10)/*若放在后面,就不是判断最后一位了.只有先判断才是最后一位,否则出错*/
digit++;
if(data[j]>=10)
{data[j+1]+=data[j]/10;
data[j]%=10;
}
}
printf("\n%d!=
",i);
for(k=digit;k>0;k--)
printf("%d",data[k]);
}
}
运行结果:
100!=93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
"stdio.h"
void
main()
{int
data[200];
int
i,j,k;
int
n;
int
digit;
for(i=0;i<200;i++)
data[i]=0;/*数组初始化全都置0*/
data[1]=1;
digit=1;
printf("input
the
number
n=
\n");
scanf("%d",&n);/*你要是求100!就输入100*/
for(i=0;i<n+1;i++)
{
for(j=1;j<digit+1;j++)
{
if(i==0)data[j]=1;
else
data[j]*=i;
}
for(j=1;j<digit+1;j++)
{
if(data[digit]>=10)/*若放在后面,就不是判断最后一位了.只有先判断才是最后一位,否则出错*/
digit++;
if(data[j]>=10)
{data[j+1]+=data[j]/10;
data[j]%=10;
}
}
printf("\n%d!=
",i);
for(k=digit;k>0;k--)
printf("%d",data[k]);
}
}
运行结果:
100!=93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询