用c++编写程序,实现10000以内的任意数阶乘

 我来答
stzdzyhs
2016-12-05 · TA获得超过233个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:43.4万
展开全部

主要参考了

http://stackoverflow.com/questions/11446973/find-factorial-of-large-numbers-in-java


#include <stdio.h>

// 数组乘法, res_size: 表示有多少位, 返回结果的位数
int multiply(int x, int res[], int res_size) {
    int carry = 0;  // 进位
    for (int i=0; i<res_size; i++) {
        int prod = res[i] * x + carry;
        res[i] = prod % 10;
        carry  = prod/10;
    }

    while (carry!=0) {
        res[res_size] = carry%10;
        carry = carry/10;
        res_size++;
    }
    return res_size;
}

void factorial(int n) {
    int res[36000]; // 10000! 位数不超过36000

    // 初始化
    res[0] = 1;
    int res_size = 1; // 表示有多少位

    // 计算 n!
    for (int x=2; x<=n; x++) {
        res_size = multiply(x, res, res_size);
    }

    printf("%d != \n", n);
    for (int i=res_size-1; i>=0; i--) {
        printf("%d", res[i]);
    }
    printf("\n");
}
int main() {        
    factorial(1000);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式