ブルーブリッジカップ--高精度乗算
1559 ワード
正の整数を入力
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を得ました!で行ないます.
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]);
}
}