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

《蓝桥杯》基础练习——阶乘计算

时间:2017-12-21 19:38:35      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:ann   pac   pos   util   log   system   使用   ace   i++   

 

问题描述
  输入一个正整数n,输出n!的值。
  其中n!=1*2*3*…*n
算法描述
  n!可能很大,而计算机能表示的整数范围有限,需要使用高精度计算的方法。使用一个数组A来表示一个大整数aA[0]表示a的个位,A[1]表示a的十位,依次类推。
  将a乘以一个整数k变为将数组A的每一个元素都乘以k,请注意处理相应的进位。
  首先将a设为1,然后乘2,乘3,当乘到n时,即得到了n!的值。
输入格式
  输入包含一个正整数nn<=1000。
输出格式
  输出n!的准确值。
样例输入
10
样例输出
3628800
 

思路:有两种方法可以解决:

法一:(真的很是暴力)使用大数存储类BigInteger,只要你电脑内存够你就可以输出够大的数

 1 import java.math.BigInteger;
 2 import java.util.Scanner;
 3 
 4 public class Main{
 5 
 6     public static void main(String[] args) {
 7         Scanner in=new Scanner(System.in);
 8         Factor F=new Factor();
 9         int N;
10         N=in.nextInt();
11         BigInteger fac;
12         fac=F.factor(N);
13         System.out.println(fac);
14     }
15 }
16 
17 class Factor{
18     BigInteger factor(int N) {
19         if(N==1||N==0) {
20              return BigInteger.valueOf(1);
21         }else {
22             return BigInteger.valueOf(N).multiply(factor(N-1));
23         }
24     }
25 }


法二:较之前的法一比较,较为技巧一点。我们使用数组来进行大数的存储。代码不长在这里不再进行多余的解释。

 1 import java.util.Scanner;
 2 
 3 public class Main{
 4 
 5     public static void main(String[] args) {
 6         Scanner in = new Scanner(System.in);
 7         int[] array = new int[100000];
 8         int N;
 9         array[0] = 1;
10         N = in.nextInt();
11         for (int i = 1; i <= N; i++) {
12             int r = 0;
13             for (int j = 0; j < array.length; j++) {
14                 int temp = array[j] * i + r;
15                 array[j] = temp % 10;
16                 r = temp / 10;
17             }
18         }
19 
20         boolean begin = false;
21 
22         for (int i = array.length - 1; i >= 0; i--) {
23             if (begin) {
24                 System.out.print(array[i]);
25                 continue;
26             }
27             if (array[i - 1] != 0) {
28                 begin = true;
29             }
30         }
31     }
32 }

 

 
 

《蓝桥杯》基础练习——阶乘计算

标签:ann   pac   pos   util   log   system   使用   ace   i++   

原文地址:http://www.cnblogs.com/SYJ-521/p/8081745.html

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