ブルーブリッジカップ--高精度乗算


正の整数を入力
n,出力
n!で行ないます.

n!=1*2*3*…*
n.
アルゴリズムの説明
  
n!大きいかもしれませんが、コンピュータが表す整数の範囲は限られており、高精度な計算方法が必要です.配列の使用
Aは大きな整数を表す
a,
A[0]は
aのビット、
A[1]表示
aの10位、順番に類推する.

a整数を掛ける
kは配列を
Aの各要素に乗算
k、対応するキャリーの処理に注意してください.
まずaを1にして、それから2に乗って、3に乗って、nに乗る時、すぐnを得ました!で行ないます.
package com.xjj.lanqiao;

import java.util.Scanner;

/*-----      --     
 * 1.         :             ,             
 * 2.      :       
 * 3.          :
 * 		int a = 100;
		String s = "" + a;
		char[] cs = s.toCharArray();
		int b = cs[0]-'0';
 * 
 * 
 * */
public class Lq2_30 {
	//    
	class bign{
		int[] d = new int[10000];	//        
		int len = 0;				//         ,    ++
	}
	bign a = new bign();
	
	//       (    )   
	public bign multi(bign a,int b){
		bign c = new bign();				//    
		int carry = 0;						//  
		for(int i = 0; i < a.len; i++){
			//       ,     b      , a,      
			int temp = a.d[i] * b + carry;
			c.d[c.len++] = temp % 10;		//      
			carry = temp / 10;				//      
		}
		//          ,     
		while(carry != 0){
			c.d[c.len++] = carry % 10;
			carry /= 10;
		}
		return c;
	}

	public static void main(String[] args) {
		System.out.println();
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		Lq2_30 lq = new Lq2_30();
		//   
		lq.a.d[0] = 1;
		lq.a.len = 1;
		for(int i = 2; i <= n; i++){
			lq.a = lq.multi(lq.a, i);
		}
		//       
		for(int i = lq.a.len-1; i >= 0; i--)
			System.out.print(lq.a.d[i]);
		
	}

}