站内搜索

1000!.低效率易懂版.谢谢各位指正

原帖及讨论:http://bbs.bccn.net/thread-179393-1-1.html

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国  http://www.bccn.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;
}

 

  • 上一篇:M个人,1到N报数出列问题
  • 下一篇:浅谈递归机制和非递归转换