首页 > 代码库 > 华为机考--简单四则运算

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

问题描述:

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

注:

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 }

运行结果:

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