簡單四則運算

來源:互聯網
上載者:User

標籤: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 }

 

 

這題還有點麻煩,忘記怎麼把中綴式改為首碼式了~呀。。。。

只能用中綴式計算了,還好輸入那麼完美

簡單四則運算

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.