地址:http://acm.uestc.edu.cn/#/contest/show/95
题目:
N - 秋实大哥搞算数
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
秋实大哥大学物理挂科了(误),于是在下学期的前两周的某一天要悲剧的补考。为了不给学校的挖掘机大楼做贡献,秋实大哥决定在假期里努力复习。当然,良好的计算能力也是非常必要的,毕竟是涉及计算自己做多少分的题能够通过考试的问题。现在他给自己出了一大堆长长的只有涉及整形四则运算式子,然后埋头计算结果。为了检验自己的计算能力,他请你来帮忙。
Input
第一行一个整数T,表示式子的总数。
接下来每一行有一个长度不超过10^6的表达式,只包含正整数和四则运算符号('+', '-', '*', '/')。
保证输入合法。
Output
对于每一个表达式,输出相应的结果,占一行。
保证运算及结果在long long范围以内。
Sample input and output
| Sample Input | Sample Output |
|---|---|
2 12+5/4-1 4*5/3 |
12 6 |
思路:
,,wa次数最多的题目,,一开始没判\r(第一见要判这个的,涨姿势了),,,wa无数次
然后智商不够,用栈搞不出来,又只能自己想了。。。。。。
我的做法是对答案有影响的就三个操作符,当前读取的操作符,和前两个,然后对所有情况分类讨论,,,这样就可以在读取的时候做的一边读取一边计算了。。。

1 #include <iostream>
2 #include <algorithm>
3 #include <cstdio>
4 #include <cmath>
5 #include <cstring>
6 #include <queue>
7 #include <stack>
8 #include <map>
9 #include <vector>
10 #include <cstdlib>
11 #include <string>
12
13 #define PI acos((double)-1)
14 #define E exp(double(1))
15 using namespace std;
16
17 int main (void)
18 {
19 int t;
20 cin>>t;
21 getchar();
22 while(t--)
23 {
24 long long num[5],ans=0;
25 char op[5],c;
26 scanf("%lld",&num[1]);
27 if(scanf("%c",&c)==EOF||c=='\n')
28 {
29 printf("%lld\n",num[1]);continue;
30 }
31 op[2]=c;//3为当前操作数
32 scanf("%lld",&num[2]);
33 while(scanf("%c",&op[3])!=EOF && op[3]!='\n')
34 {
35 scanf("%lld",&num[3]);
36 if(op[3]=='*'||op[3]=='/')
37 {
38 if(op[2]=='+'||op[2]=='-')
39 {
40 if(op[3]=='*')num[2]*=num[3];
41 else num[2]/=num[3];
42
43 }
44 else
45 {
46 if(op[2]=='*') num[1]*=num[2];
47 else num[1]/=num[2];
48 num[2]=num[3];
49 op[2]=op[3];
50 }
51
52 }
53 else
54 {
55 if(op[2]=='+'||op[2]=='-')
56 {
57 if(op[2]=='+') num[1]+=num[2];
58 else num[1]-=num[2];
59 num[2]=num[3];
60 op[2]=op[3];
61 }
62 else
63 {
64 if(op[2]=='*') num[1]*=num[2];
65 else num[1]/=num[2];
66 num[2]=num[3];
67 op[2]=op[3];
68 }
69 }
70 }
71 if(op[2]=='*') ans=num[1]*num[2];
72 else if(op[2]=='/') ans=num[1]/num[2];
73 else if(op[2]=='+') ans=num[1]+num[2];
74 else ans=num[1]-num[2];
75 printf("%lld\n",ans);
76 }
77
78 return 0;
79 }
来源:https://www.cnblogs.com/weeping/p/5456145.html
