hdu1042 N!(大数求阶乘)

N!

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 94583    Accepted Submission(s): 28107

Problem Description

Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N!

Input

One N in one line, process to the end of file.

Output

For each N, output N! in one line.

Sample Input

1

2

3

Sample Output

1

2

6

数据范围比较大,要用到大数。

c++

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 string Multiply(string s,int x)
 4 {
 5     reverse(s.begin(),s.end());
 6     int cmp=0;
 7     for(int i=0; i<s.size(); i++)
 8     {
 9         cmp=(s[i]-‘0‘)*x+cmp;
10         s[i]=(cmp%10+‘0‘);
11         cmp/=10;
12     }
13     while(cmp)
14     {
15         s+=(cmp%10+‘0‘);
16         cmp/=10;
17     }
18     reverse(s.begin(),s.end());
19     return s;
20 }
21 int main()
22 {
23     int n;
24     while(~scanf("%d",&n))
25     {
26             string sum="1";
27             for(int i=1; i<=n; i++)
28             {
29                 sum=Multiply(sum,i);
30             }
31             cout<<sum<<endl;
32     }
33     return 0;
34 }

Java

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 public class Main {
 4     public static void main(String[] args) {
 5         Scanner cin = new Scanner(System.in );
 6         while(cin.hasNext()) {
 7                int n=cin.nextInt();
 8                    BigInteger sum=BigInteger.valueOf(1);
 9                    for(int i=1;i<=n;i++)
10                    {
11                        BigInteger temp=BigInteger.valueOf(i);
12                        sum=sum.multiply(temp);
13                    }
14                    System.out.println(sum);
15
16         }
17     }
18 }

PS:这题好像还是Java比较快。。。

原文地址:https://www.cnblogs.com/fqfzs/p/9973295.html

时间: 2024-11-07 04:41:42

hdu1042 N!(大数求阶乘)的相关文章

HDU1042 N! 大数的阶乘

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 由于数字特别大, 所以用数组来模拟. 经测试, 数组大小开50000 可过. 附AC代码, 欢迎大神指点~ #include <cstdio>#include <cstring> const int maxn = 50000 + 100;int a[maxn];void solve(int n){ memset(a, 0, sizeof(a)); a[0] = 1; int p

利用递归求阶乘

1 package com.d; 2 3 import java.util.Scanner; 4 5 public class Digui { 6 7 public static void main(String[] args) { 8 Digui d = new Digui(); 9 10 System.out.println("请输入一个整数"); 11 Scanner scan = new Scanner(System.in); 12 int a = scan.nextInt()

求阶乘及阶乘和

1 #求阶乘方法一 2 def f1(n) 3 if n == 1 4 return 1 5 else 6 return n * f1(n-1) 7 end 8 end 9 10 #求阶乘方法二 11 def f2(n) 12 i = 1 13 while n > 0 14 i *= n 15 n -= 1 16 end 17 return i 18 end 19 20 #求1到n的阶乘之和方法一 21 sum = 0 22 (1..43).each do | x | 23 sum = sum

1130: 零起点学算法37——求阶乘

1130: 零起点学算法37--求阶乘 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 2109  Accepted: 1328[Submit][Status][Web Board] Description 输入一个正整数n,计算它的阶乘 Input 输入一个正整数n(n<=10)(多组数据) Output 输出n的阶乘(每组数据一行) Sample Input 3 Sample Output 6

1131: 零起点学算法38——求阶乘和

1131: 零起点学算法38--求阶乘和 Time Limit: 1 Sec  Memory Limit: 64 MB   64bit IO Format: %lldSubmitted: 2719  Accepted: 1736[Submit][Status][Web Board] Description 输入一个正整数n(n<=10),计算 S=1!+2!+3!+...+n! Input 输入一个正整数n(n<=10)(多组数据) Output 输出S(每组数据一行) Sample Inpu

【GDOI 2011 DAY2 T3】零什么的最讨厌了 (快速求阶乘、中国剩余定理)

问题描述: 林记在做数学习题的时候,经常遇到这种情况:苦思冥想了很久终于把问题解出来,结果发现答案是0,久而久之林记在得到习题答案是0的时候就没有了做出一道难题的成就感.于是林记决定:以后出题,答案一定不能是0,例如求n!最低位非零数这样的习题就很不错了. 现在林记提出了一个更难一点的问题:求n!在K进制下的最低位非零数.其中K符合一些特殊的条件:K是由若干个互不相同的质数相乘得出来的,例如K=2,3,5,6,7,10…… 输入格式: 首先输入的第一行是一个整数Q,表示询问的个数. 接下来是Q个

POJ 2635 The Embarrassed Cryptographer(大数求余)

题意:给出一个大数,这个大数由两个素数相乘得到,让我们判断是否其中一个素数比L要小,如果两个都小,输出较小的那个. 分析:大数求余的方法:针对题目中的样例,143 11,我们可以这样算,1 % 11 = 1:      1×10 + 4 % 11 = 3:      3×10 + 3 % 11 = 0;我们可以把大数拆成小数去计算,同余膜定理保证了这个算法的这正确性,而且我们将进制进行一定的扩大也是正确的. 注意:素数打标需要优化,否则超时.   进制需要适当,100和1000都可以,10进制超

light_oj 1138 求阶乘后导零的个数

light_oj 1138  求阶乘后导零的个数 N - Trailing Zeroes (III) Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Submit Status Practice LightOJ 1138 Description You task is to find minimal natural number N, so that N! contains exactly Q 

求阶乘、质数

public class A { public static void main(String[] args) { } // 求质数 100以内的 public static void zhishu() { for (int j = 1; j < 100; j++) { int i = 0; for (int j2 = 1; j2 <= j; j2++) { if (j % j2 == 0) { i++; } } if (i == 2) { System.out.println(j + &qu