C语言1乘到100怎么编写

如题所述

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值已变,故应自加
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-13
int a=1;
for(i=1;i<101,i++)
{
a=a*i;
}
第2个回答  2013-07-13
你用一个FOR语句就能搞定