| 网站首页 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛 |
 
 
 
您现在的位置: 编程中国 >> 技术教程 >> 开发语言 >> C语言 >> C技术资料 >> 正文
  ►  1000!.低效率易懂版.谢谢各位指正
1000!.低效率易懂版.谢谢各位指正
作者:nuciewth    阅读人次:……    文章来源:本站原创    发布时间:2007-10-22    网友评论()条
 

原帖及讨论:http://bbs.bc-cn.net/dispbbs.asp?BoardID=5&ID=179393

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

 

 
文章录入:编辑01    责任编辑:编辑01 
  • 上一篇文章:

  • 下一篇文章:

  •  
    相关文章
    原创地带
    24小时热门帖子