タイトル説明
古いウニはスポーツが大好きな人で、毎日小さなウニが一緒に運動しに来ます。運動をより効果的にするために、彼は、n日目のトレーニング量がn番目の正の回文数(最初の正の回文数は1)と等しくなるように運動計画を作成したいと考えています。古いウニはすでにスケジュールを印刷していますが、スケジュールの一部が欠落していて、再計算したくないので、この問題の解決を手伝ってくれませんか。
数の桁が逆に並べられた後もそれ自体と等しい場合、そのような数は回文数と呼ばれます。たとえば、12321は回文数であり、1232は回文数ではありません。
入力データ
最初の行には整数t(1≤t≤100000)があります。これは、データのグループがt個あることを意味します。データの各グループには、n日を表す整数n(1≤n≤400000)の行が1つだけあります。
出力データ
データの各セットについて、対応するトレーニング量を示す整数が出力されます。
サンプル入力
5
1
2
3
12
23
サンプル出力
1
2
3
33
141
経験:プログラムを使用して法律を表現する方法がわかりません。オンラインのC ++コード変更を参照してください。
def daBiao(n):
result = ''
s = 9
ans = 1
# 判断第n个数有多少位,原理等同于打表求值
while n > s * 2:
n -= s * 2
s *= 10
ans *= 10
ans += (s if n%s==0 else n%s)-1
result = str(ans) # 前半部分
# n个位数为奇数,去掉最后一位
if n - s <= 0:
ans = int(ans/10)
while(ans):
result += str(ans % 10) #后半部分
ans = int(ans/10)
print(result)
T = int(input())
for t in range(T):
n = int(input())
daBiao(n)