解题思路:主要注意理清各指令的关系,计算指令都需要有两个数字以上,所以是在碰到数字的时候才有可能操作,放在数字的分支里.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 人评分
点我有惊喜!你懂得!浏览:1417 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:607 |
剪刀石头布 (C语言代码)浏览:802 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:537 |
【偶数求和】 (C语言代码)浏览:460 |
C二级辅导-同因查找 (C语言代码)浏览:618 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:545 |
C语言训练-排序问题<1> (C语言代码)浏览:369 |
【计算球体积】 (C语言代码)浏览:1619 |
核桃的数量 (C语言代码)浏览:874 |