|
发表于 2023-4-1 12:46:53
|
显示全部楼层
本帖最后由 zhangjinxuan 于 2023-4-1 12:51 编辑
我们要向他人虚心请教,做一个不耻下问的好学生,这样我们的水平才会有所提高  
说亮话,我不会,我真搞不懂哪里出了问题
- #include <bits/stdc++.h>
- import sys
- s = str() #整个表达式
- char = [] #运算符
- num = [] #数字
- n = int() #字符串的长度
- nums = int(-1) #数字的个数
- chrs = int(-1) #运算符的个数
- impossible_number = 11451419198105201314100863141592699897894123784923 #当一个数字消除了的时候,把他设为这个数字,后面再做处理
- def output() -> None: #输出
- global num, nums, char, chrs
- print('=', end = '')
- tot = chtot = -1
- for i in range(0, nums + 1): #去掉消除了的数字
- if num[i] != impossible_number:
- tot += 1
- num[tot] = num[i]
- for i in range(0, chrs + 1): #运算符同理
- if char[i] != '.':
- chtot += 1
- char[chtot] = char[i]
- nums = tot
- chrs = chtot
- for i in range(0, nums + 1): #输出
- print(num[i], end = '')
- if i != nums:
- print(char[i], end = '')
- print()
- def main() -> int: #主函数
- global nums, chrs, num, char, impossible_number
- s = input().strip()
-
- n = len(s)
- t = int()
- for i in range(n):
- if s[i].isdigit(): #获取数字
- t = t * 10 + int(s[i])
- else: #运算符,说明数字结束
- nums += 1
- chrs += 1
- num += [t]
- char += [s[i]]
- t = 0
- nums += 1 #还有一个数字没有添加
- num += [t]
- print(" %s" % s)
- while nums != 0: #还有数字
- pos = int(0)
- for i in range(0, chrs + 1): #获取第一个乘,除号
- if char[i] == '*' or char[i] == '/':
- pos = i
- break
- lv = num[pos] #获取运算符两边数字
- rv = num[pos + 1]
- num[pos + 1] = impossible_number
- if char[pos] == '+': #运算
- num[pos] = lv + rv
- elif char[pos] == '-':
- num[pos] = lv - rv
- elif char[pos] == '*':
- num[pos] = lv * rv
- elif char[pos] == '/':
- num[pos] = lv // rv
- else:
- pass
- char[pos] = '.' #要消除的运算符标记
- output()
- tmp = eval(s.replace('/', '//')) #一个验证,看看结果对不对
- if tmp == num[pos]:
- return 0
- else:
- return 1
- return 0
- if __name__ == '__main__':
- sys.exit(main())
复制代码 |
|