1

2 つの大きな整数を乗算する再帰プログラムを Java で作成しました。入力を文字列として取得し、それを各セルの各桁を保持する int 配列に格納すると、プログラム全体が 2 つの int 配列で動作します。私のプログラムは、約 1000 桁のサイズの入力に対して正常に動作します。約2000桁の入力を与えると、プログラムは単に停止します(Eclipseで)。「応答なし」ステータスなし、エラー/通知メッセージなし、出力なし。プログラム入力の作業制限サイズを制限するキャッチは何かを知りたいです。再帰を使用していて、スタック フレームを格納するための十分なメモリがないためですか?

これが私のプログラムの核心です

private int[] bigInt(int[] a, int[] b, int expo) {
    if(n1==1)
    {
        result=multiply(a[a.length-1],b[a.length-1]);
        if(expo!=0)
            result=exponential(result,expo);
    }
    else
    {
        int A1[]=divideArray(a,0,n1/2);
        int A2[]=divideArray(a,n1/2,n1);
        int B1[]=divideArray(b,0,n2/2);
        int B2[]=divideArray(b,n2/2,n2);
        int tempA[]=bigInt(A1,B1,0);
        int A[]=exponential(tempA, n1);

        int[] addB=addArray(B1,B2);
        int[] addA=addArray(A1,A2);
        int Byet[]=bigInt(addA,addB,0);
        int C[]=bigInt(A2,B2,0);
        int B[]=subArray(Byet,tempA,C,n1/2);

        result=addArray(A,addArray(B,C));
    }

    return result;
}
4

1 に答える 1

0

出力は得られますが、非常に大きいため、コンソールに出力できません。ファイルに出力すると、出力が表示されます:)

于 2012-09-08T18:11:50.877 に答える