加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

大数阶乘

发布时间:2020-12-14 01:15:40 所属栏目:大数据 来源:网络整理
导读:大数阶乘 http://acm.nyist.net/JudgeOnline/problem.php?pid=28 时间限制:3000?ms ?|? 内存限制:65535?KB 难度:3 输入 输入一个整数m(0m=5000) 输出 输出m的阶乘,并在输出结束之后输入一个换行符 样例输入 50 样例输出 3041409320171337804361260816606

大数阶乘

http://acm.nyist.net/JudgeOnline/problem.php?pid=28

时间限制:3000?ms ?|? 内存限制:65535?KB

难度:3

输入

输入一个整数m(0<m<=5000)

输出

输出m的阶乘,并在输出结束之后输入一个换行符

样例输入

50

样例输出

30414093201713378043612608166064768844377641568960512000000000000

描述

我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?

?

我的代码

#include <stdio.h>
//5000!大概是一万六千为左右
#define MAX 20000
char res[MAX];//char 本质上也是一个数字,可以运算,由于是全局变量,所以已经初始化为0
int main(int argc,char*argv[]){
    int i,j = 0,n,digit = 0,t;//进位
    scanf("%d",&n);
    res[0] = 1;//阶乘由1开始,数字的低位在数组的下标低位
    int length = 1;//数字长度为1
    for (i = 2; i <= n; i++){//由2开始乘
        digit = 0;
        for (j = 0; j < length; j++){
            t = res[j] * i + digit;
            if (j == length - 1 && t >= 10) //如果数字的最高位还需进位,长度加一
                length++;
            digit = t / 10;
            res[j] = t % 10;
        }
    }

    //倒序输出
    for (i = length - 1; i >= 0; i--)
        printf("%d",res[i]);
    printf("n");
    return 0;
}

?

?

题目推荐代码

#include <stdio.h>
#include <string.h>
const int maxn = 20000;
int a[maxn];
int main(){
    int n,i,j,s,c;
    scanf("%d",&n);
    memset(a,sizeof(a));
    a[0] = 1;
    for (i = 2; i <= n; i++){
        c = 0;
        for (j = 0; j <= maxn; j++){
            s = a[j] * i + c;
            a[j] = s % 10;
            c = s / 10;
        }
    }
    for (j = maxn; j >= 0; j--) if (a[j]) break;
    for (i = j; i >= 0; i--) printf("%d",a[i]);
    printf("n");
    return 0;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读