前提・実現したいこと
Atcoder のBeginnerContest のC問題について質問です。わかりづらいのですが、桁数ごとに分けて計算してみたところ、入力例1および2では正しく出力されるのですが、入力例3のような大きな数字では正しく出力されません。それほど大きくない数字ではうまくいくのでやり方が違うようには思えないのですが、具体的にどの部分がおかしいか教えていただければ幸いです。よろしくお願いいたします。
問題及び具体例としては下記のものになります。
整数 N が与えられるので、以下の問題を解いてください。
f(x)= ( x 以下の正整数で、 x と桁数が同じものの数) とします。
f(1)+f(2)+⋯+f(N) を 998244353 で割った余りを求めてください。
制約
N は整数
1≤N<10**18
入力例1
16
出力例1
73
入力例2
238
出力例2
13870
入力例3
999999999999999999
出力例3
762062362
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
N = int(input())
ketasuu = len(str(N))
total = 0
for i in range(ketasuu - 1):
x = 9 * (10 ** i)
to = x * (x+1) / 2
total += to
y = N - (10 ** (ketasuu - 1)) + 1
to2 = y * (y+1) / 2
total += int(to2)
answer = int(total % 998244353)
print(int(answer))
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/08 15:36