第1个回答 2011-06-29
#include<stdio.h>
#include<string.h>
void swap(int c[], int len)
{
int i = 0;
int tmp;
for (; i < len; ++i, --len)
{
tmp = c[i];
c[i] = c[len];
c[len] = tmp;
}
}
int mul(char a[], char b[], int c[])
{
int c1,c2,i,k;
c1=strlen(a);
c2=strlen(b);
for(i=0;i<c1;i++)
for(k=0;k<c2;k++)
c[i+k]+=(a[c1-i-1]-'0')*(b[c2-k-1]-'0');
k=999;
while(c[k]==0)
k--;
for(i=0;i<=k;i++)
{
c[i+1]+=c[i]/10;
c[i]%=10;
}
while(c[i]>0)
i++;
swap(c, i-1);
for (k = 0; k < i; ++k)
printf("%d", c[k]);
printf("\n");
return i;
}
void mycopy(char b[], int c[], int len)
{
int i;
for (i = 0; i < len; ++i)
sprintf(b+i, "%d", c[i]);
}
int main()
{
char a[1000] = {0}, b[1000] = {0};
int c[1000] = {1};
int i;
int len = 1;
int n = 0;
printf("输入n的值:");
scanf(" %d", &n);
for (i = 1; i <= n; i++)
{
memset(b, 0, 1000);
mycopy(b, c, len);
sprintf(a, "%d", i);
memset(c, 0, 4*len);
len = mul(a, b, c);
}
return 0;
}
100的阶乘肯定木有问题!只要 算出来的数别大于1000位就是可以的!
第3个回答 2011-06-30
#include <stdio.h>
long fun ( int k)
{
if(k==0||k==1)return 1;
else return k*fun(k-1);
}
void main( )
{ int k ;
scanf("%d",&k);
printf("%d!=%ld\n", k, fun ( k )) ;
}