解题思路:
本题的主要难度在于不同进制数的相加计算。
十进制和十六进制可以做特殊处理。
具体方案如下,代码有详细注释。
注意事项:
参考代码:
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语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:694 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:1402 |
汽水瓶 (C++代码)浏览:816 |
C语言程序设计教程(第三版)课后习题6.8 (C++代码)浏览:682 |
C语言程序设计教程(第三版)课后习题8.8 (C++代码)浏览:551 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:684 |
三进制小数 (C++代码)(第11位大于1.5才能进位)浏览:1151 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:689 |
简单的a+b (C语言代码)浏览:629 |
字符串输入输出函数 (Java代码)浏览:1440 |