大数阶乘问题

日后整理

 1 import java.math.BigInteger;
 2
 3 public class Factorial {
 4
 5     public static void main(String[] args) {
 6         // System.out.println(recursion(0));
 7         // System.out.println(circulation(1));
 8         System.out.println(bigInteger(100));
 9     }
10
11     /**
12      * 方法一 迭代实现阶乘
13      */
14     public static int recursion(int n) {
15         int sum = 1;
16         if (n < 0)
17             throw new IllegalArgumentException("必须为正整数");
18         if (n == 1 || n == 0) {
19             return sum;
20         } else {
21             sum = n * recursion(n - 1);
22             return sum;
23         }
24         // return sum;
25
26     }
27
28     /**
29      * 方法二 循环实现阶乘
30      */
31     public static int circulation(int n) {
32         int sum = 1;
33         if (n >= 0) {
34             if (n == 0 || n == 1) {
35                 return 1;
36             } else {
37                 int i = 1;
38                 while (i <= n) {
39                     sum = sum * n;
40                     n--;
41                 }
42                 return sum;
43             }
44         } else
45             throw new IllegalArgumentException("传入参数非法!");
46         // return sum;
47     }
48
49     /**
50      * 方法三 利用BigInteger类
51      */
52
53     public static BigInteger bigInteger(int n) {
54         BigInteger sum = new BigInteger("1");
55         if (n >= 0) {
56             if (n == 0 || n == 1) {
57                 return BigInteger.valueOf(1);
58             } else {
59                 int i = 1;
60                 while (i <= n) {
61                     sum = sum.multiply(BigInteger.valueOf(n));
62                     n--;
63                 }
64                 return sum;
65             }
66         } else
67             throw new IllegalArgumentException("传入参数非法!");
68     }
69
70 }

http://ly5633.iteye.com/blog/1219408

http://www.it165.net/pro/html/201409/21349.html

http://blog.csdn.net/liyong199012/article/details/40341779

时间: 2024-12-21 02:17:07

大数阶乘问题的相关文章

大数阶乘(c语言)

大数阶乘.代码比较简单. #include<stdio.h> #include<string.h> #define MAXN 25000 // 如果你的阶乘N比较大,建议大一点 int result[MAXN]; int main() { int i,j,n; scanf("%d",&n); // memset函数的作用将某一段内存设置成指定的值 // 参数1:内存首地址 参数2:指定的值 参数3:内存大小 memset(result,0,sizeof(

精度计算-大数阶乘

精度计算-大数阶乘 本算法的目的在于计算一个比较大的数的阶乘,由于得到的结果比较大,是现有的数据类型无法存储的,所以我决定将结果存储在一个long a[]数组中. 我们的思路是把每4位数看做数组的一个元素来存储,例如:个.十.百.千存在a[0],万.十万.百万.千万存在a[1]以此类推. 我们用10的阶乘来模拟一下求结果大于4位数阶乘的过程,9的阶乘为362880,而10的阶乘为9的阶乘乘以10,在计算完9的阶乘时a[0] = 2880,a[1]=36,因为362880*10 = (36*10+

NYON28大数阶乘

大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入 输入一个整数m(0<m<=5000) 输出 输出m的阶乘,并在输出结束之后输入一个换行符 样例输入 50 样例输出 30414093201713378043612608166064768844377641568960512000000000000 解析:在开数组的时候一定要开大一点,我开的小怎么都不能通过,气死我了,

hdu 1042 N!(大数阶乘,转化为100000这样的比较大的进制)

N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 54172    Accepted Submission(s): 15365 Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in one

nyoj___大数阶乘

http://acm.nyist.net/JudgeOnline/problem.php?pid=28 大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入 输入一个整数m(0<m<=5000) 输出 输出m的阶乘,并在输出结束之后输入一个换行符 样例输入 50 样例输出 3041409320171337804361260816606476884437764156896

#转 大数阶乘算法

大数阶乘算法 大数阶乘算法 前几天朋友问我一个问题:“10000的阶乘怎么算?”当时我就有点懵,“10000”这个数字太大了,无论用什么数据类型保存结果都会溢出.这可怎么办呢?一时间束手无策.然后被一顿鄙视.后来经朋友的提醒,才恍然大悟,终于知道怎么实现了,原来是使用数组来模拟数字,这样无论结果数字有多大,只要数组的长度够长就能表示出来,用这个办法可以进行大数据的运算.看起来还是挺有用的.我把它用程序实现出来,如果有用到的地方还可以借鉴一下.(最起码还可以拿来鄙视别人^_^)首先定义一个足够长的

斯特林公式(计算大数阶乘)

#include <iostream> #include <cstdio> #include <cmath> #define PI 3.1415926535898 #define e 2.718281828459 using namespace std; ///斯特林 ///n!=sqrt(2*PI*n)*pow(n/e,n) int main() { int n;cin>>n; while(n--){ long long m; scanf("%l

【大数阶乘】NYOJ-28

大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入 输入一个整数m(0<m<=5000) 输出 输出m的阶乘,并在输出结束之后输入一个换行符 样例输入 50 样例输出 30414093201713378043612608166064768844377641568960512000000000000 [代码] 1 //NYOJ-28 大数阶乘 2 //直接开足够大的数组

NYOJ28 大数阶乘

这是做的第一道大数乘法题,之前一道腾讯校招试题也用的是大数,不过是大数加法,并且在做这道题的时候发现了一种很好的处理数位的方法. 大数阶乘 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入 输入一个整数m(0<m<=5000) 输出 输出m的阶乘,并在输出结束之后输入一个换行符 样例输入 50 样例输出 304140932017133780436126081660647688

大数阶乘(C/C++)

高精度的运算在Java中是很容易实现的,就像 a + b Problem 一样,因为Java提供了相应的类库和API:但是在 C/C++ 当中就没有那么现成的类和API来让你调用了.本着“自己动手,丰衣足食”的Coder精神,还是自己上吧.让我们一起看看如何使用 C/C++ 来进行大数的阶乘吧. /* *From:<算法竞赛入门经典>――刘汝佳 *Author:YQ_beyond *Date:2015.03.29 */ /* C++当中高精度运算 */ #include<iostream