解题思路:不是很难,主要涉及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分
2 人评分
C语言训练-阿姆斯特朗数 (C语言代码)浏览:897 |
C二级辅导-等差数列 (C语言代码)浏览:628 |
回文数(一) (C语言代码)浏览:809 |
成绩转换 (C语言代码)浏览:1048 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:564 |
C语言程序设计教程(第三版)课后习题6.8 (C++代码)浏览:614 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:590 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:569 |
printf基础练习2 (C语言代码)浏览:547 |
字符串比较 (C语言代码)浏览:770 |