解题思路:主要注意理清各指令的关系,计算指令都需要有两个数字以上,所以是在碰到数字的时候才有可能操作,放在数字的分支里.num中存储的永远是十进制数,只在输出时用要求的进制输出,计算就将其它进制的数转为10进制计算,
注意事项:在这个网站AC了,但官网不行,不知道哪里出问题,有测试数据的同学能评论发我,感谢!感谢!
参考代码:
def ten_to_k(n, x): # 10进制转36以内进制 a = [chr(i) for i in range(48, 58)]+[chr(i) for i in range(65, 91)] b = [] while n > 0: y = n % x b.append(a[y]) n = n // x b.reverse() return b def k_to_ten(string, x): # 36以内进制转10进制 target = 0 length = len(string) for i in range(length): if "0" <= string[i] <= "9": target += (ord(string[i]) - 48) * (x ** (length - i - 1)) else: target += (ord(string[i]) - 55) * (x ** (length - i - 1)) return target n = int(input().strip()) num = 0 #只存储十进制表示 instruct = "" pre_ins = "" # 存储计算指令 k = 10 for i in range(n): instruct = input().strip().split() if instruct[0] == "CLEAR": num = 0 pre_ins = "" elif instruct[0] == "NUM": if pre_ins != "":#至少有一个数字才能计算 if pre_ins == "ADD": num += k_to_ten(instruct[1], k) elif pre_ins == "SUB": num -= k_to_ten(instruct[1], k) elif pre_ins == "MUL": num *= k_to_ten(instruct[1], k) elif pre_ins == "DIV": num //= k_to_ten(instruct[1], k) elif pre_ins == "MOD": num %= k_to_ten(instruct[1], k) else: num = k_to_ten(instruct[1], k) elif instruct[0] == "EQUAL":#转成目标进制再输出 for each in ten_to_k(num, k): print(each, end = "") print() elif instruct[0] == "CHANGE":#记录当前进制 k = int(instruct[1]) else: pre_ins = instruct[0]
0.0分
1 人评分
C语言训练-委派任务* (C语言代码)..................竟然是第一个浏览:2177 |
矩阵转置 (C语言代码)浏览:1525 |
C语言程序设计教程(第三版)课后习题6.3 (C语言代码)浏览:516 |
C语言训练-素数问题 (C语言代码)浏览:998 |
C语言程序设计教程(第三版)课后习题10.1 (Java代码)浏览:1447 |
简单的a+b (C语言代码)浏览:530 |
【简单计算】 (C语言代码)浏览:622 |
C语言训练-求s=a+aa+aaa+aaaa+aa...a的值 (C语言代码)浏览:613 |
简单的a+b (C语言代码)浏览:577 |
用筛法求之N内的素数。 (C++代码)浏览:693 |