码迷,mamicode.com
首页 > 其他好文 > 详细

阶乘计算

时间:2019-12-29 12:45:12      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:阶乘计算   计算   math   led   void   printf   out   put   clu   

题目描述
输入一个正整数n,输出n!的值。

其中n!=1*2*3*…*n。

算法描述

n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数a,A[0]表示a的个位,A[1]表示a的十位,依次类推。

将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。

首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
输入
输入包含一个正整数n,n< =1000。 
输出
输出n!的准确值。
样例输入
10 
样例输出
3628800

c++代码如下:

#include <stdio.h>
#include <stdlib.h>
int num[5000]; 
int jcjs(int num[],int n){
    num[0]=1;
    int len=1;
    int i;
    for(i=1;i<=n;++i){
        len=0;
        int p = 0;
        int jw=0;
        while(num[p]!=-1){ 
            num[p]*=i;
            num[p]+=jw;
            jw=0;  //进位加完置零 
            if(num[p]>=10){
                jw=num[p]/10;
                num[p]%=10;
            }
            p++;
            len++;
        }
        if(jw!=0){
            while(jw){ //进位值不一定是1位 要循环处理 
                num[p++]=jw%10;
                jw/=10;
                len++;
            }  
        }  
    }
    return len-1;
}
int main(int argc, char *argv[]) {
    int n;
    while(scanf("%d",&n)!=EOF){
        memset(num,-1,sizeof(num));
        int len = jcjs(num,n);
        for(len;len >=0;--len){
                printf("%d",num[len]); 
        }
        printf("\n");
    }
    return 0;
}

java代码如下:

import java.math.BigInteger;
import java.util.Scanner;

public class Main{

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        BigInteger s=BigInteger.ONE;
        for(int i=1;i<=n;i++){
        s=s.multiply(new BigInteger(i+""));
        }
        System.out.println(s);
    }
}

python代码如下:

n=int(input())
i=1
s=1
while(i<=n):
    s*=i
    i+=1
print(s)

阶乘计算

标签:阶乘计算   计算   math   led   void   printf   out   put   clu   

原文地址:https://www.cnblogs.com/cstdio1/p/12114384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!