配列による乗算


問題の説明は正の整数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;

}

}