時間限制:
1000
ms | 記憶體限制:
65535
kb難度:3描述
輸入第一行輸入乙個整數n,共有n組測試資料(n<10)。
每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式的中綴式,每個表示式都是以「=」結束。這個表示式裡只包含+-*/與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。
資料保證除數不會為0
輸出每組都輸出該組中綴式相應的字尾式,要求相鄰的運算元操作符用空格隔開。
樣例輸入
21.000+2/4=
((1+2)*5+1)/4=
樣例輸出
1.000 2 4 / + =
1 2 + 5 * 1 + 4 / =
題解:主要完成對陣列postexp
中指定位置新增空格。
程式**:
#include
#include
#define maxsize 1000
#define maxop 7
struct //設定運算子優先順序
lpri=,,,,,,},
rpri=,,,,,,};
int leftpri(char op) //求左運算子
op的優先順序
int rightpri(char op) //求右運算子
op的優先順序
int inop(char ch) //判斷
ch是否為運算子
int precede(char op1,char op2) //op1和
op2運算子優先順序的比較結果
void trans(char *exp,char postexp)
//將算術表示式
exp轉換成字尾表示式
postexp
op; //定義運算子棧
int i=0; //i作為
postexp
的下標op.top=-1;
op.top++; //將
'='進棧
op.data[op.top]='=';
while (*exp!='\0') //exp表示式未掃瞄完時迴圈
// postexp[i++]='#'; //用
#標識乙個數值串結束
postexp[i++]=' '; }
else //為運算子的情況
switch(precede(op.data[op.top],*exp))
} //while (*exp!='\0')
while (op.data[op.top]!='=')
//此時
exp掃瞄完畢
,退棧到
'='為止
postexp[i++]='='; //給
postexp
表示式新增結束標識
postexp[i++]='\0'; }
int main()
system("pause");
return 0; }
中綴式變字尾式
時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述 輸入第一行輸入乙個整數n,共有n組測試資料 n 10 每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式的中綴式,每個表示式都是以 結束。這個表示式裡只包含 與小括號這幾種符號。其中小括號可以巢狀使用。資料保證...
中綴式變字尾式
描述 輸入第一行輸入乙個整數n,共有n組測試資料 n 10 每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式的中綴式,每個表示式都是以 結束。這個表示式裡只包含 與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。資料保證除數不會為0 輸出每組都輸出該...
中綴式變字尾式
時間限制 難度 3 描述 輸入 第一行輸入乙個整數n,共有n組測試資料 n 10 每組測試資料只有一行,是乙個長度不超過1000的字串,表示這個表示式的中綴式,每個表示式都是以 結束。這個表示式裡只包含 與小括號這幾種符號。其中小括號可以巢狀使用。資料保證輸入的運算元中不會出現負數。資料保證除數不會...