題目:有字符串表示的一個四則運算表達式,要求計算出該表達式的正確數值。 說明: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);
}
