2018年全国多校算法寒假训练营练习比赛(第三场)---E---题(大数阶乘(模板题)c++/java/py)

题目链接---E-进击吧!阶乘

时间限制:C/C++ 3秒,其他语言6秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

给定一个整数N(0≤N≤10000),求取N的阶乘

输入描述:

多个测试数据,每个测试数据输入一个数N

输出描述:

每组用一行输出N的阶乘
  
  
示例1

输入

1
2
3

输出

1
2
6
模板题:
c++实现:
#include <iostream>  
#include <cstring>  
using namespace std;  
int main()  
{  
    int n,i,j,k,l,m;  
    int a[50000];    
    memset(a,0,sizeof(a));  
    a[0]=1;  
    m=0;  
    cin>>n;  
    for(i=2;i<=n;i++)  
    {  
        for(l=0,j=0;j<=m;j++)  
        {  
            k=a[j];  
            a[j]=(k*i+l)%10;  
            l=(k*i+l)/10;  
        }  
        while(l)                //这里,避免了对数字高位为0的运算!!!  
        {  
            a[++m]=l%10;  
            l/=10;  
        }  
    }  
    while(m>=0)  
        cout<<a[m--];  
    cout<<endl;   
    return 0;  
} 


java实现:
import java.math.BigInteger;  
import java.util.Scanner;  
public class Main{  
    public static void main(String[] args) {       
    Scanner inputScanner=new Scanner(System.in);  
       while(inputScanner.hasNext())  
       {  
           int n=inputScanner.nextInt();  
           BigInteger m;  
           m=BigInteger.valueOf(1);//将m定义成大数的1  
           for(int i=1;i<=n;i++)  
           {  
               m=m.multiply(BigInteger.valueOf(i));//大数乘法  
           }  
           System.out.println(m);  
       }    
    }  
} 
python实现:
while True:
    try:
        n = int(input())
        ans = 1
        for i in range(1,n+1):
            ans = ans * i
        print(ans)
    except:
        break



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值