题目:有字符串表示的一个四则运算表达式,要求计算出该表达式的正确数值。
说明:1. 四则运算即加减乘除"+-*/"
2. 该表达式中的数字只能是1位(数值范围0~9)
3.另若有不能整除的情况,按向下取整处理,eg: 8/3得出值为2。
例如:若有字符串"8+7*2-9/3",计算出其值为19。
代码如下:
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <assert.h>
int cal(int nNum1, char op, int nNum2)
{
if(op == '+')
{
return nNum1 + nNum2;
}
if(op == '-')
{
return nNum1 - nNum2;
}
if(op == '*')
{
return nNum1 * nNum2;
}
if(op == '/')
{
return nNum1 / nNum2;
}
}
int calculate(int len, char *expstr)
{
assert(expstr);
if(len < 3)
{
return -1;
}
char *p = expstr;
int nNum1 = p[0] - '0';
char op = p[1];
int nNum2 = p[2] - '0';
p += 3;
while(*p)
{
if(*p=='*' || *p=='/')
{
nNum2 = cal(nNum2, *p, p[1]-'0');
}
else
{
nNum1 = cal(nNum1, op, nNum2);
op = *p;
nNum2 = p[1] - '0';
}
p += 2;
}
return cal(nNum1, op, nNum2);
}
int main()
{
//char str[] = "1+2*3/5-6*7";
char str[] = "8+7*2-9/3";
int res = calculate(strlen(str), str);
printf("result: %d\n", res);
}

浙公网安备 33010602011771号