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

资讯 驱动中国 若水 121 次阅读 0 条评论
分享 Q

/*
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;
}

版权声明:本文由驱动中国整理发布,转载需注明出处与原文链接。如有疑问请联系 editor@qudong.com
本文价值 成为第一个评分的人
登录后为本文打分
网友评论0 条评论
正在回复 的评论取消
评论加载中…
🔐

登录后参与互动

评论、点赞均可赚积分
连续签到、邀请好友也有奖励 🎁

电脑端: 微信扫码登录 微信内: 一键登录

微信扫一扫

打开微信「扫一扫」,分享本文到朋友圈或好友