nyoj(表示式求值)

2021-07-29 19:33:42 字數 3548 閱讀 2178

描述

acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a+b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。

比如輸入:「1+2/4=」,程式就輸出1.50(結果保留兩位小數)

輸入 第一行輸入乙個整數n,共有n組測試資料(n<10)。

每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式,每個表示式都是以「=」結束。這個表示式裡只包含+-*/與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。

資料保證除數不會為0

輸出 每組都輸出該組表示式的運算結果,輸出結果保留兩位小數。

樣例輸入

2 1.000+2/4=

((1+2)*5+1)/4=

樣例輸出

1.50

4.00

#include

#include

#include

int map[7][7]= //算符間的優先關係,100表示不會出現的情況

, ,,,

,,

};int cam(char c)

}double sol(double x,char c,double y)

}int z(char c)

char str[1005];

char optr[1005];

double opnd[1005];

int main()

else

if(z(ch)==-1)

ch=str[k++];

else

else

if(map[temp1][temp2]==0) //脫括號並接受下乙個字元

else

//退棧並將運算結果}}

printf("%.2lf\n",opnd[0]);

}return0;}

//#include

//#include

//////資料棧

//typedef struct da

// sda;

//////運算子棧

//typedef struct op

// sop;

//////初始化資料棧

//int initsda(sda * p)

////

////初始化運算子棧

//int initsop(sop * p)

////

////資料入棧

//int pushsda(sda * p, float d)

//// else

// return 1; //棧滿

//}//

////運算子入棧

//int pushsop(sop * p, char c)

//// else

// return 1; //棧滿

//}//

////資料出棧

//int popsda(sda * p, float * d)

//// else

// return 1;

//}//

////運算子出棧

//int popsop(sop * p, char * c)

//// else

// return 1;

//}//

////從s[*pc]開始獲取乙個浮點數

//int strtoint(char s, int * pc, float *pout)

//// buf[i] = '\0';

// *pout = (float)atof(buf);

// return 0;

// }

//}//

////從s[*pc]獲取乙個char

//int strtochar(char s, int *pc, char *pout)

//// else

// return 1;

//}//

////獲取優先順序

//char getpri(char c1, char c2)

//;//

// int i=0, j=0;

// switch(c1)

//

// switch(c2)

//

// return f[i][j];

//}//

////計算表示式

//float operate(float a, char op, float b)

////}

////int main(void)

//// }

// }

// popsda(&sda, &a);

// printf("%.2f\n", a);

// }

// return 0;

//}//

//c++

//#include

//#include

//#include

//#include

//#include

//#include

//#include//stl數值演算法標頭檔案

//#include

//#include

//#include

//#include

//#include

//#include//模板類標頭檔案

//using namespace std;

////const int inf=0x3f3f3f3f;

//const int maxn=110000;

//typedef long long ll;

////int priority(char c)

////

//void compute(stack& num,stack& op)

//// op.pop();

//}//

//int main()

//// else

//

// else if(op.empty() || priority(str[i])>priority(op.top()))

// op.push(str[i]);

// else

//

// }

// }

// op.pop();

// printf("%.2f\n",num.top());

// num.pop();

// }

// return 0;

//}

NYOJ 表示式求值問題

時間限制 3000 ms 記憶體限制 65535 kb 難度 4描述 acm隊的mdd想做乙個計算器,但是,他要做的不僅僅是一計算乙個a b的計算器,他想實現隨便輸入乙個表示式都能求出它的值的計算器,現在請你幫助他來實現這個計算器吧。比如輸入 1 2 4 程式就輸出1.50 結果保留兩位小數 輸入第...

NYOJ 409表示式求值

include include include include include include includeusing namespace std define max 1005 define clr arr memset arr,0,sizeof arr struct nodes class e...

NYOJ35 表示式求值

搞了差不多2天,原來乙個是sstream的用法困惑好久,需要對陣列清零 include include include include include include includeusing namespace std char mid 1008 post 1008 char compare ch...