1

値をファイルに出力しようとしましたが、4 桁を超えると結果が切り取られます。

import java.io.FileNotFoundException;
import java.math.BigInteger;

public class create_referencevalues {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Long[] list = { 10L, 40L, 90L, 160L, 250L, 350L, 500L, 650L, 800L,
                1000L };

        try {
            java.io.PrintStream p = new java.io.PrintStream(
                    new java.io.BufferedOutputStream(
                            new java.io.FileOutputStream(new java.io.File(
                                    "C:/users/djdeejay/listall.csv"), false)));
            for (long i = 0; i < 1024; i++) {
                //p.print(Long.toBinaryString(i));
                Long sum1 = 0L;
                for (int j = 0; j < 10; j++) {
                    if (BigInteger.valueOf(i).testBit(j)) {
                        sum1 += (list[j]);
                    }
                }

                p.println( i + ";"+sum1);

            }

            p.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

}

印刷された最後の5つの値は次のとおりです。

1018;3750
1019;3760
1020;3800
1021;3810
1022;3840
1023;3850

最後は次のとおりです。38500

ここで何が恋しいですか???

4

2 に答える 2

2

最後の値は実際には 38500 ではなく 3850 である必要があります。i = 1023 の場合、すべてのビットが設定され、最後の行は list[] 内のすべての数値を一緒に追加した場合と同じになります。

1000+650+800+500+350+250+160+90+40+10 = 3850

于 2013-08-22T19:18:18.847 に答える
2

に問題はありませんprintln。あなたのコードは、私が期待していることを正確に実行します。あなたが主張する最後の行を考えてみてください。これは正しくありません。

1023;3850

10 進数102311111111112 進数です。したがって、 の場合i=1023、プログラムの内側のループは、 内のすべての数値の合計を単純に計算しますlist。これらの数値の合計は になり3850、これが出力されます。

于 2013-08-22T19:19:11.137 に答える