标签:style blog http color io os ar for 2014
问题描述:
输入一个只包含个位数字的简单四则运算表达式字符串,计算该表达式的值
注:
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 }
运行结果:
标签:style blog http color io os ar for 2014
原文地址:http://www.cnblogs.com/LiuYujie/p/3964991.html