简单四则运算

 简单四则运算

问题描述:

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

注:

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 != '')
 66     {
 67         if (cal.getSize() > 0 && switchCal(cal.getTop()) == 2 )
 68         {
 69             i = num.getTop();
 70             printf("
");
 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 == '')
 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("
");
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
",calculate(len,str));
116 }

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

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

原文地址:https://www.cnblogs.com/george-cw/p/3938232.html