0

正の整数の基本的な桁数カウンター (整数が入力され、その整数の桁数が出力される) を作成しようとしています。これは私の一般的な式です:

dig(x) := Math.floor(Math.log(x,10))

dig(x)に相当するものを Ruby で実装しようとしたところ、計算dig(1000)中に 2.9999999999999996 が返されたため、3 ではなく 2Math.logが返され、2 に切り捨てられることがわかりました。この問題を処理する適切な方法は何ですか? (このアプローチを実装するために使用される言語に関係なく、この問題が発生する可能性があると想定していますが、そうでない場合は、回答で説明してください)。

4

3 に答える 3

1

整数の桁数の正確なカウントを取得するには、通常のことを行うことができます: (C/C++ では、n負でないことを前提としています)

int digits = 0;
while (n > 0) {
  n = n / 10; // integer division, just drops the ones digit and shifts right
  digits = digits + 1;
}

確かではありませんが、組み込みの対数関数を実行してもこれより速くなることはないと思います。これにより、正確な答えが得られます。

私はそれについて少し考えましたが、対数ベースのアプローチを保証して機能させる方法を思いつくことができませんでした。等

于 2013-12-30T05:48:08.090 に答える