1

夜。Javaでの16進数の計算について質問があります。許可される桁数に何らかの制約を加えて、N桁の妥当なアルゴリズムで円周率を計算しようとしています(15〜20のようなものを考えてください)。最終的には、これは後で電卓の1つの機能になります。

ばかげたレベルの精度を求めているわけでも、アルゴリズムの助けを求めているわけでもありません。魔法のAPIメソッドがあることは知っていますが、自分でやりたいと思っています。

公式:ベイリー-ボールウェイン-プルーフの公式。私が理解していることから、それは16進数で円周率を計算します。

それで、私の問題は何ですか?私はJavaが苦手です。私が受講したクラス(データ構造まで)は、言語固有のものに焦点を当てることなく、目的を達成するための手段として私が知っている言語のみを実際に使用していました。 円周率を16進数でn番目の桁に計算してから、表示のためにその値を文字列に変換したいと思います。

それからどこから始めるべきかについての提案はありますか?私のJavaでのコーディングの経験は約20週間で、私が立ち往生しているのはJava固有のもののようです。

私がどこかで間違っているなら、ぜひそれを指摘してください。私は学ぶためにここにいます。

4

2 に答える 2

1

私はあなたの現在のアルゴリズムをBigDecimal最初に使用して実装します。これが満足のいくように機能する場合、BigDecimalが提供する機能を置き換えることを検討できます(独自に作成したい場合)

于 2012-05-17T07:13:24.663 に答える
1

何が役立つか正確にはわかりませんが、ここに私の提案があります。式を示しているので、while ループの繰り返しの代わりに RECURSION を使用できます。コード例:

public static int series(int a, int b, int loopCount) {
    int sumTemp = a + b;
    b = sumTemp;

    loopCount--;
    if (loopCount > 0) {
        return series(a, b, loopCount);
    }
    else
    {
        return sumTemp;
    }
}

public static void main(String[] args) {
     int sum = series(5, 10, 3);
     System.out.println("Sum = " + sum);
}

ノート:

  • この単純な式の初期値は 5 と 10 であることに注意してください。関数 series はループ内で 2 つの値を合計します。
  • 私のシリーズ関数では、新しい合計がパラメーター b に格納されます。Java は参照ではなく値で渡すため、この手法は私に強制されます。
  • パラメータ loopCount はループ番号を追跡します。
  • 最後に、変数 sum が戻り値です。

最後に、16 の累乗計算に Math.pow 関数を使用します。クラスMathはあなたの研究に非常に役立ちます。

幸運を、

トミー・クウィー

于 2012-05-17T07:33:43.950 に答える