argius note

プログラミング関連

与えられた数字のケタ数

どう書く?org
1〜10000000をランダム(種も不定)で1000回テスト。(Java1.4)

private static void test(int i) {
    double d = StrictMath.log(i)
               / StrictMath.log(10d)
               + 0.0000000000000005d;
    int digit = ((int)d) + 1;
    int length = String.valueOf(i).length();
    if (digit != length) {
        String message = "n = " + i + ", result: " + d;
        throw new IllegalArgumentException(message);
    }
    int pow = (int)StrictMath.pow(10, (int)d);
    System.out.println("n = " + i + " => " + digit + ", " + pow);
}

public static void main(String[] args) {
    long seed = System.currentTimeMillis();
    Random r = new Random(seed);
    for (int i = 0; i < 1000; i++) {
        test(r.nextInt(10000000));
    }
}

なんか誤差が出ますね。補正してますが、これで良いんでしょうか。