/***************************************************************************/
/*** 今天,space给了我一道题,算1000的阶乘,费了5个小时编出来了,编译通过****/
/********* 可是,结果怎么看怎么不正确,又找不出原因,哎********************/
/*********1000!*************************************************************/
/*********Arthor laigaoat2005******data 2007-4-25 0:27****ver0.0.0.1********/
/****************** 有错等着改 请同行帮忙看看 **************/
/***************************************************************************/
/********调试:在C-Free 3.5中编译通过***************************************/
/***************************************************************************/
#include<stdio.h>
#include<math.h>
void gewei(int *p,int k);
void shiwei(int *p,int j);
void baiwei(int *p,int i);
void jingwei(int *p,int m);
main()
{
int arr[1500],i,j,k;
arr[996]=1;
for(i=999;i>0;i--)
for(j=999;j>0;j--)
for(k=0;k>999;k--)
{
gewei(&arr[999],k);
shiwei(&arr[998],j);
baiwei(&arr[997],i);
}
for(i=0;i<1000;i++)
{
printf("%d",arr[i]);
}
getchar();
}
void gewei(int *p,int k)
{
int i,m;
for(i=999;i>0;i++,p--)
{
m=*p*k;
if(m>9)
{
jingwei(p, m);
}
}
}
void shiwei(int *p,int j)
{
int i,m;
for(i=998;i>0;i++,p--)
{
m=*p*j;
if(m>9)
{
jingwei(p, m);
}
}
}
void baiwei(int *p,int i)
{
int i,m;
for(i=997;i>0;i++,p--)
{
m=*p*i;
if(m>9)
{
jingwei(p, m);
}
}
}
void jingwei(int *p,int m) /*用递归调用完成进位功能*/
{
int a,b,c;
if(!(m>9))
return;
else
{
a=m%10; /*取得操作位的数*/ /* 进位操作 */
b=m/10; /*取得操作位的上一位的数*/
*p=a; /*将操作位上的数填入*/
p--; /*移动指针到上一位*/
*p=b;
c=b+*p;
jingwei(p,c);
}
}