問題は、与えられた 10 進数が与えられた基数で持つことができる桁数を決定するための式を導出することです。
例: 10 進数 100006 は、基数 2、3、4、5、6、7、8 のそれぞれ 17、11、9、8、7、6、8 桁で表すことができます。
これまでに導き出した式は次のようになります: (log10(num) /log10(base)) + 1.
C/C++ では、この式を使用して上記の結果を計算しました。
long long int size = ((double)log10(num) / (double)log10(base)) + 1.0;
しかし、悲しいことに、式が正しい答えを与えていないのは、次のような場合です。
Number 8 in base 2 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 64 in base 2 : 1,0,0,0,0,0,0
Number of digits: 7
Formula returned: 6
Number 64 in base 4 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 125 in base 5 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 128 in base 2 : 1,0,0,0,0,0,0,0
Number of digits: 8
Formula returned: 7
Number 216 in base 6 : 1,0,0,0
Number of digits: 4
Formula returned: 3
Number 243 in base 3 : 1,0,0,0,0,0
Number of digits: 6
Formula returned: 5
Number 343 in base 7 : 1,0,0,0
Number of digits: 4
Formula returned: 3
したがって、エラーは1桁です。考えられるすべてのケースで機能するように、式を修正するのを誰かに手伝ってもらいたいだけです.
編集:入力仕様に従って、10000000000、つまり10 ^ 10のようなケースに対処する必要があります.C / C ++のlog10()がそのようなケースを処理できるとは思いませんか?したがって、この問題の他の手順/式は高く評価されます。