解题思路:
本题的主要难度在于不同进制数的相加计算。
十进制和十六进制可以做特殊处理。
具体方案如下,代码有详细注释。
注意事项:
参考代码:
def cal_n(a,b): #n进制加法计算 global n if n == 10: return str(int(a)+int(b)) elif n == 16: a = list(a) for i in range(len(a)): #将a中的字母转换为对应的值 if 'A'<=a[i]<='F': a[i] = str(ord(a[i])-55) b = list(b) for i in range(len(b)): #将b中的字母转换为对应的值 if 'A'<=b[i]<='F': b[i] = str(ord(b[i])-55) T = 0 #存储进位 c = '' #存储本位 for i in range(len(a)-1,-1,-1): #a和b相加,从后往前计算 temp = int(a[i])+int(b[i]) if (temp+T)%n > 9: c = c + chr(55+(temp+T)%n) else: c = c + str((temp+T)%n) T = (temp+T)//n if T: #不要忘记如果最后进制大于0,需要加上 c = c + str(T) return c[::-1] #逆序即为结果 else: T = 0 c = '' for i in range(len(a)-1,-1,-1): temp = int(a[i])+int(b[i]) c = c + str((temp+T)%n) T = (temp+T)//n if T: c = c + str(T) return c[::-1] def check(x): #检查是否为回文数 if x == x[::-1]: return 1 else: return 0 def f(n,num): step = 0 while True: if check(num): print('STEP={}'.format(step)) break else: num_ = num[::-1] num = cal_n(num,num_) step = step+1 if step > 30: print('Impossible!') break if __name__ == '__main__': n = int(input()) num = input().strip() f(n,num)
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:601 |
字符串的输入输出处理 (C语言代码)浏览:922 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:480 |
简单的a+b (C语言代码)浏览:596 |
母牛的故事 (C语言代码)浏览:549 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:542 |
蓝桥杯历届试题-翻硬币 (C++代码)浏览:872 |
C语言训练-8除不尽的数 (C语言代码)浏览:1396 |
C语言训练-字符串正反连接 (C语言代码)浏览:629 |
C语言程序设计教程(第三版)课后习题7.3 (C++代码)浏览:457 |