配列による乗算
1315 ワード
問題の説明は正の整数nを入力して、nを出力します!で行ないます.ここでn!=1*2*3*…*n. アルゴリズム記述n!大きいかもしれませんが、コンピュータが表す整数の範囲は限られており、高精度な計算方法が必要です.1つの配列Aを用いて大きな整数aを表し,A[0]はaのビットを表し,A[1]はaの10ビットを表し,順次類推する.aに整数kを乗算すると、配列Aの各要素にkを乗算するようになります.対応するキャリーを処理することに注意してください.まずaを1にして、それから2に乗って、3に乗って、nに乗る時、すぐnを得ました!で行ないます.
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO
Scanner sc = new Scanner(System.in);
// N
int n = sc.nextInt();
int[] arr = new int[] { 1 };
for (int i = 0; i < n; i++) {
arr = mult(arr, i + 1);
}
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[arr.length - i - 1]);
}
}
//
public static int[] mult(int[] s, int m) {
//
int[] arr = new int[s.length + (s[s.length - 1] * m + "").length() - 1];
//
for (int i = 0; i < s.length; i++) {
int temp = s[i] * m;
arr[i]=temp;
}
//
for (int i = 0; i < arr.length-1; i++) {//
if (arr[i] > 9) {
int temp = arr[i];
arr[i] = temp % 10;
arr[i + 1]+= temp / 10;
}
}
return arr;
}
}