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