地址: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次数最多的题目,,一开始没判 (第一见要判这个的,涨姿势了),,,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==' ') 28 { 29 printf("%lld ",num[1]);continue; 30 } 31 op[2]=c;//3为当前操作数 32 scanf("%lld",&num[2]); 33 while(scanf("%c",&op[3])!=EOF && op[3]!=' ') 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 ",ans); 76 } 77 78 return 0; 79 }