この問題を解く上で重要な命題を紹介します.
- 正整数xを2倍して繰り上がりが発生したとき,繰り上がる桁は1桁だけでありその最高位は1である
まずこれを桁数に関する数学的帰納法で示します.
1桁の時,繰り上がりが起こるのは5から9のみであるので,
実際に計算すると5×2=10,6×2=12,7×2=14,8×2=16,9×2=18より成立.
n桁の時に成立すると仮定する.
xを(n+1)桁の正整数とする.
また,dをxの最高位の数字とする.
dを用いると,x=d×10n+(x−d×10n)と表すことができる.
よって2×x=2d×10n+2×(x−d×10n)である.
xとdの定義の仕方によりx−d×10nはn桁の整数であるので,
2×(x−d×10n)<2×10nが成立.
また,1桁の時の結果より,2d≤18であるので,
2d×10n≤18×10nが成立.
これらの不等式を辺々足すと
2d×10n+2×(x−d×10n)=2x<20×10n=2×10n+1を得る.
よって成立.
この命題を用いると,「a0からaXのうち最高位が1であるものの個数」は
「aXの桁数」と一致することが言えます.
よって,aXの桁数を求めてそれを出力すればよいです.
桁数は[log102X]+1=[X×log102]+1によって求めることができます([a]でa以下の最大の整数を表す).