標籤:style blog http color io ar 2014 問題 div
簡單四則運算
問題描述:
輸入一個只包含個位元字的簡單四則運算運算式字串,計算該運算式的值
註:
3.1、運算式只含 +, -, *, / 四則運算子,不含括弧
3.2、運算式數值只包含個位整數(0-9),且不會出現0作為除數的情況
3.3、要考慮加減乘除按通常四則運算規定的計算優先順序
3.4、除法用整數除法,即僅保留除法運算結果的整數部分。比如8/3=2。輸入運算式保證無0作為除數情況發生
3.5、輸入字串一定是符合題意合法的運算式,其中只包括數字字元和四則運算子字元,除此之外不含其它任何字元,不會出現計算溢出情況
要求實現函數:
int calculate(int len, char *expStr)
【輸入】 int len: 字串長度;
char *expStr: 運算式字串;
【輸出】 無
【返回】 計算結果
樣本:
1)輸入:char *expStr = “1+4*5-8/3”
函數返回:19
2)輸入:char *expStr = “8/3*3”
函數返回:6
1 #include<stdio.h> 2 template <typename T> 3 class MyStack{ 4 int top; 5 int sum; 6 T a[100]; 7 public: 8 MyStack(){top = -1; sum = 0;} 9 T getTop(){return a[top];} 10 int getSize(){return sum;} 11 bool pop() 12 {if(top >=0) 13 { 14 top--; 15 sum--; 16 return true; 17 } 18 else return false; 19 } 20 bool push(T value) 21 { 22 if (top >= 99) 23 return false; 24 else 25 { 26 a[++top] = value; 27 sum++; 28 } 29 } 30 31 }; 32 int switchCal(char c) 33 { 34 switch(c) 35 { 36 case ‘+‘: 37 case ‘-‘: 38 return 1; 39 case ‘*‘: 40 case ‘/‘: 41 return 2; 42 default: 43 return 0; 44 } 45 } 46 int calc(char c,int i,int j) 47 { 48 switch(c) 49 { 50 case ‘+‘: return i+j; 51 case ‘-‘: return i-j; 52 case ‘*‘: return i*j; 53 case ‘/‘: return i/j; 54 default: 55 return 0; 56 } 57 } 58 59 int calculate(int len, char *expStr) 60 { 61 char *p = expStr; 62 int i,j; 63 MyStack<int> num; 64 MyStack<char> cal; 65 while (*p != ‘\0‘) 66 { 67 if (cal.getSize() > 0 && switchCal(cal.getTop()) == 2 ) 68 { 69 i = num.getTop(); 70 printf("\n"); 71 printf("pop: %d ",i); 72 num.pop(); 73 j = *p - ‘0‘; 74 p++; 75 printf("jump: %d ",j); 76 printf(" calculate %c ",cal.getTop()); 77 i = calc(cal.getTop(),i,j); 78 cal.pop(); 79 num.push(i); 80 printf("push: %d ",i); 81 } 82 if (*p == ‘\0‘) 83 break; 84 if (*p >= ‘0‘ && *p <= ‘9‘) 85 { 86 i = *p - ‘0‘; 87 printf("push: %d ",i); 88 num.push(i); 89 } 90 else 91 { 92 cal.push(*p); 93 printf("push: %c ",*p); 94 } 95 p++; 96 } 97 while (cal.getSize()) 98 { 99 i = num.getTop();100 num.pop();101 j = num.getTop();102 num.pop();103 i = calc(cal.getTop(),j,i);104 cal.pop();105 num.push(i);106 }107 printf("\n");108 return num.getTop();109 }110 int main()111 {112 int len;113 char str[100];114 scanf("%d%s",&len,str);115 printf("%d\n",calculate(len,str));116 }
這題還有點麻煩,忘記怎麼把中綴式改為首碼式了~呀。。。。
只能用中綴式計算了,還好輸入那麼完美
簡單四則運算