题面描述
老顽童是一个热爱运动的人,每天都有小顽童来和他一起锻炼。为了让锻炼更有成效,他想要制定一份锻炼计划,让第 n 天的训练量要等于第 n 个正回文数 ( 第 1 个正回文数是 1) 。老顽童已经打印好了计划表,但是他的计划表中有一些日子被遗漏了,他又不想重新计算,你可以帮他解决这个问题吗?
如果一个数的各位数字反向排列后仍然等于其本身,则把这样的数称为回文数 (palindrome number) ,如 12321 是回文数, 1232 不是回文数。
输入数据
第一行有一个整数 t (1 ≤ t ≤ 100000) ,表示有 t 组数据。每组数据只有一行,为一个整数 n (1 ≤ n ≤ 400000) ,表示第 n 天。
输出数据
对于每组数据,输出一个整数,表示对应的训练量。
样例输入
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)