华为机考--简单四则运算

问题描述:

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

注:

1、表达式只含 +, -, *, / 四则运算符,不含括号

2、表达式数值只包含个位整数(0-9),且不会出现0作为除数的情况

3、要考虑加减乘除按通常四则运算规定的计算优先级

4、除法用整数除法,即仅保留除法运算结果的整数部分。比如8/3=2。输入表达式保证无0作为除数情况发生

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

思想是将数字和符号分别放在两个栈里,用C++实现:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 int calculate(int len, char *expStr)
 5 {
 6     int num[50],op[50];
 7     int numCount=0,opCount=0,result=0;
 8     int i;
 9     num[numCount++]=expStr[0]-'0';
10     for (i=1;i<len-1;i+=2)
11     {
12         if (expStr[i]=='+'||expStr[i]=='-')
13         {
14             num[numCount++]=expStr[i+1]-'0';
15             op[opCount++]=expStr[i];
16         }
17         else if (expStr[i]=='*')
18         {
19             num[numCount-1]=num[numCount-1]*(expStr[i+1]-'0');
20         }
21         else if (expStr[i]=='/')
22         {
23             num[numCount-1]=num[numCount-1]/(expStr[i+1]-'0');
24         }
25     }
26     result=num[0];
27     for (i=0;i<opCount;i++)
28     {
29         if (op[i]=='+')
30         {
31             result+=num[i+1];
32         }
33         else if (op[i]=='-')
34         {
35             result-=num[i+1];
36         }
37     }
38     return result;
39 }
40 
41 int main()
42 {
43     int len;
44     char *expStr=new char[100];
45     int i;
46     while(cin>>expStr)
47     {
48         len=0;
49         for (i=0;expStr[i];i++)
50         {
51             len++;
52         }
53         cout<<calculate(len,expStr)<<endl;
54     }
55     return 0;
56 }

运行结果:

原文地址:https://www.cnblogs.com/LiuYujie/p/3964991.html