原题链接:回文数(二)
解题思路:不是很难,主要涉及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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复