質問: pc print(ans) ``` いくつかのテストサンプルでは通るのですが、誤答の出力もあるみたいです。こう改良した方がよい、ここが間違っている等のご指摘お願い致します。
回答: スマホからなので動作確認とかは出来ていませんが digit(len(str(n))) まずここがおかしくてdigit(n)ですね。 while文内のif文がelseの時にplもprも更新されず永久ループに陥りそうです。 ここらはケアレスミスですね。 そして最後3つのif文ですが price(A, B, pl-1) < X < price(A, B, pr): これは恐らくループ内最後の判定が if X > price(A, B, pc): である場合を想定しているのだと思いますが、X < price(A, B, pr)である保証がなく、もう一方も同様なのでいずれの条件にも引っかからない場合があります(pr+1は保証されてる) で、別の考え方ですが N=10^k+n (0≦n<10^k) とすると A(10^k+n)+B(k+1)≦X が条件なので An≦X-A*10^k-B(k+1) となるkとnの組のうちNが最大となるものを探せばよく kは最大でも17なので簡単に答えが求まるのではないかと思います。