原题链接:蓝桥杯2017年第八届真题-小计算器
解题思路:主要注意理清各指令的关系,计算指令都需要有两个数字以上,所以是在碰到数字的时候才有可能操作,放在数字的分支里.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分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复