原题链接:回文数(二)
解题思路:不是很难,主要涉及10进制数和其他进制数的转换,我的注释比较详细
参考代码:
# 将n进制数转换成10进制
def ChangeToTen(n, m):
result = 0
i = 0
while m != 0:
result += m % 10 * pow(n, i)
i += 1
m //= 10
return result
# 将数字反转
def ChangeConvert(n):
result = str(n) # 数字转字符串
result = list(result) # 字符串转列表
lenth = len(result)
for i in range(lenth // 2):
t = result[i]
result[i] = result[lenth - 1 - i]
result[lenth - 1 - i] = t
result = ''.join(result) # 列表转字符串
return int(result)
# 将10进制转换成n进制
def ChangeToOther(n, m):
result = 0
i = 0
while m != 0:
result += m % n * pow(10, i)
i += 1
m //= n
return result
# 判断数字是否为回文
def IsHuiwen(n):
result = str(n) # 数字转字符串
lenth = len(result)
for i in range(lenth // 2):
if result[i] != result[lenth - 1 - i]:
return 0
return 1
if __name__ == '__main__':
while 1:
n = int(input())
m = int(input())
STEP = 0
flag = 1
if n == 10:
if IsHuiwen(m):
print("STEP=" + str(STEP))
else:
while IsHuiwen(m) == 0:
m += ChangeConvert(m)
STEP += 1
if STEP > 30:
flag = 0
print("Impossible!")
break
if flag:
print("STEP=" + str(STEP))
else:
if IsHuiwen(m):
print("STEP=" + str(STEP))
else:
while IsHuiwen(m) == 0:
# # 将n进制数转换成10进制
# a = ChangeToTen(n, m)
# # 将n进制数字反转
# b = ChangeConvert(m)
# # 将n进制反转的数字转换成10进制
# c = ChangeToTen(n, b)
# # 未反转的十进制与反转的十进制相加
# d = a + c
# # 将上述相加产生的十进制转换成n进制
# m = ChangeToOther(n, d)
m = ChangeToOther(n, ChangeToTen(n, m) + ChangeToTen(n, ChangeConvert(m)))
STEP += 1
if STEP > 30:
flag = 0
print("Impossible!")
break
if flag:
print("STEP=" + str(STEP))0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复