首页 > 代码库 > 简单四则运算

简单四则运算

 简单四则运算

 

问题描述:

输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值

注:

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 }

 

 

这题还有点麻烦,忘记怎么把中缀式改为前缀式了~呀。。。。

只能用中缀式计算了,还好输入那么完美

简单四则运算