HDU 1237 简单计算器 栈
http://acm.hdu.edu.cn/showproblem.php?pid=1237
题意:
给你一个只有+ - * / 的计算表达式 , 要你求出结果.
坑爹:
一开始我只是以为只要在输入的时候遇到*或者/就弹出来进行计算,然后在到最后计算 + 和 - 的时候直接弹出
一个一个计算,最后才发现原来在最后弹出来计算的时候要全部反过来,不能直接弹出就计算然后压入.
解法:
遇到 * 或者 / 就弹出两个进行计算, 然后压入结果 , 到最后的时候把栈里的数字反过来,也就是用一个数组从0 - n
开始存每一个出栈的数字 , 符号栈也是相同的操作 , 然后就可以进行正常的按顺序这样做 + 和 - 操作了.
View Code
1 #include<iostream> 2 #include<stack> 3 using namespace std; 4 5 6 int main() 7 { 8 char ex[300]; 9 while(scanf("%s",ex) != EOF) 10 { 11 double num; 12 char str; 13 stack <double> N; 14 stack <char> C; 15 16 int flag = 0; int len; 17 len = strlen(ex) ; 18 19 for(int y = 0 ; y < len ; y ++) 20 { 21 if(ex[0] != '0') 22 { 23 flag = 1; 24 break; 25 } 26 } 27 if(!flag) 28 { 29 if(getchar() == '\n') 30 { 31 break; 32 } 33 } 34 35 36 37 38 num = ex[ len - 1 ] - 48; 39 40 for( y = len - 2 ; y >= 0 ; y -- ) 41 { 42 double a = ex[y] - 48 ; 43 for(int k = 0 ; k < len - y - 1 ; k++ ) 44 { 45 a *= 10 ; 46 } 47 num += a; 48 } 49 50 N.push(num); 51 52 53 54 for (int i = 1; ; i++ ) 55 { 56 57 cin>>str ; 58 cin>>num ; 59 N.push(num); 60 61 62 63 if(str == '/' ) 64 { 65 double a; 66 double b; 67 a = N.top(); 68 N.pop(); 69 b = N.top(); 70 N.pop(); 71 N.push( b / a ); 72 } 73 74 if(str == '*' ) 75 { 76 double a; 77 double b; 78 a = N.top(); 79 N.pop(); 80 b = N.top(); 81 N.pop(); 82 N.push( b * a ); 83 } 84 85 if(str == '-' || str == '+') 86 { 87 C.push(str); 88 } 89 90 91 92 if( getchar() == '\n') 93 { 94 break; 95 } 96 } 97 98 if(C.size() != 0) 99 { 100 double st[300]; 101 char sd[300]; 102 int count; 103 for(i = 0 ; N.size() != 0 ; i ++) 104 { 105 st[i] = N.top(); 106 N.pop(); 107 } 108 for(i = 0 ; C.size() != 0 ; i++ ) 109 { 110 sd[i] = C.top(); 111 C.pop(); 112 } 113 sd[i] = '\0' ; 114 115 int len1; 116 len1 = strlen(sd); 117 char *p = sd + len1 - 1; 118 119 for(i = len1 ; i >0 ; i -- ) 120 { 121 if(*p == '+' ) 122 { 123 st[i-1] = st[i-1] + st[i]; 124 } 125 if(*p == '-' ) 126 { 127 st[i -1 ] = st[i] - st[i-1]; 128 } 129 p--; 130 } 131 132 printf("%.2lf\n",st[0]); 133 } 134 else 135 { 136 printf("%.2lf\n",N.top()); 137 } 138 139 } 140 return 0; 141 }

浙公网安备 33010602011771号