*/ 出自: 编程中国 http://www.bc-cn.net
*/ 作者: nuciewth E-mail:wth870628@163.com QQ:314218584
*/ 时间: 2007-10-20 编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------
/*
1000!的阶乘速度还算可以忍受了
,当然和孔明,飞燕的大数阶乘的效率是不能比的了.
但理解起来比较方便.所以帖出来玩玩.大家给点意见吧.数组可以再定义大点,算更大的数要好
久才出结果
有什么BUG请大家批评和指正.谢谢各位了.
*/
/**
 * @(#)factorial.cpp *
 *
 * @author nuciewth
 * @version 1.00 2007/10/20
 */
#include<stdio.h>
int main()
{
    int data[20000]={1,1,0}; //初始化,数组从1开始记数
    int num;                 //阶乘大小
    int digit=1;             //每次阶乘得出结果的位数
    scanf("%d",&num);
    for(int i=1;i<=num;i++)
    {
        for(int j=1;j<=digit;j++)//先做每一位与i的乘积放在一个数组空间中
        {
            data[j]*=i;
        }
        for(int j=1;j<=digit;j++)//调整个元素的值,使之在0--9之间
        {
            if(data[j]>9)        
            {
                for(int k=1;k<=digit;k++)
                {
                    if(data[digit]>9)     //位数增加
                    {
                        digit++;
                    }
                    data[k+1]+=data[k]/10;//调整
                    data[k]%=10;
                }
            }
        }
    }
    printf("%d!=",num);
    for(int j=digit;j>0;j--)
    {
        printf("%d",data[j]);
    }
    printf("\n");
    return 0;
}
    

											

	    
