解题思路:
本题的主要难度在于不同进制数的相加计算。
十进制和十六进制可以做特殊处理。
具体方案如下,代码有详细注释。
注意事项:
参考代码:
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语言训练-排序问题<1> (C语言代码)浏览:1401 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:621 |
校门外的树 (C语言代码)浏览:977 |
C语言程序设计教程(第三版)课后习题1.6 (C语言代码)浏览:729 |
C二级辅导-阶乘数列 (C语言代码)浏览:731 |
C语言程序设计教程(第三版)课后习题8.1 (C语言代码)浏览:1285 |
【矩阵】 (C++代码)浏览:982 |
求圆的面积 (C语言代码)浏览:1746 |
C语言训练-亲密数 (C语言代码)浏览:693 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:556 |