平常我們書寫的表示式稱為中綴表示式,因為它將運算子放在兩個運算元中間,許多情況下為了確定運算順序,括號是不可少的,而字尾表示式就不必用括號了。字尾標記法:書寫表示式時採用運算緊跟在兩個運算元之後,從而實現了無括號處理和優先順序處理,使計算機的處理規則簡化為:從左到右順序完成計算,並用結果取而代之。例如:8-(3+2*6)/5+4可以寫為:8 3 2 6*+5/-4+ 其計算步驟為:
(1):8 3 2 6 * + 5 / -4 +
(2):8 3 12 + 5 / - 4 +
(3):8 15 5 / - 4 +
(4):8 3- 4 +
(5):5 4 +
(6):9
編寫乙個程式,完成這個轉換,要求輸出的每乙個資料間都留乙個空格。
輸入就一行,是乙個中綴表示式。輸入的符號中只有這些基本符號「0123456789+-*/^()」,並且不會出現形如2*-3的格式。表示式中的基本數字也都是一位的,不會出現形如12形式的數字。所輸入的字串不要判錯。
輸出若干個中綴表示式,第i+1行比第i行少乙個運算子和乙個運算元,最後一行只有乙個數字,表示運算結果。運算的結果可能為負數,「/」以整除運算。並且中間每一步都不會超過2^31。
樣例輸入
8-(3+2*6)/5+4樣例輸出
8 3 2 6 * + 5 / - 4 +8 3 12 + 5 / - 4 +
8 15 5 / - 4 +
8 3 - 4 +
5 4 +
9
#include#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
typedef
long
long
ll;
typedef
long
double
ldb;
#define inf 99999999
#define pi acos(-1.0)
char s[200
];
char q[11111
];
char str[200
];
struct
nodeq2[
11111
];
struct
node1;
bool
operator
<(node1 a,node1 b)
setmyset;
set::iterator it;
int suan(int a,int b,char
str)
} int
main()
if(s[i]==')'
) str[tot++]=q[rear];
rear--;
} }
if(s[i]=='
+' || s[i]=='-'
) rear++;
q[rear]=s[i];
} if(s[i]=='
*' || s[i]=='/'
) str[tot++]=q[rear];
rear--;
} rear++;
q[rear]=s[i];
} if(s[i]=='^'
) str[tot++]=q[rear];
rear--;
} rear++;
q[rear]=s[i];
} }
while(front<=rear)
str[tot]='\0'
;
int flag=1
;
for(i=0;i)
printf("\n
");
intfront2,rear2;
front2=1
; rear2=0
; myset.clear();
for(i=0;i)
else
} char
c;
intindex,num1,num2;
while(front2<=rear2)
if((*it).indexelse printf("
%d",(*it).num);
it++;
} else
} printf("\n
");
} it=myset.begin();
cout
<<(*it).num<}
return
0;
}
表示式轉換 中綴表示式轉換為字尾表示式
算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入格式 輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。輸出格式 在一行中輸出轉換後的字尾表示式,...
表示式轉換
2 3 7 4 8 4 2 3 7 4 8 4 思路 a.若為 入棧 b.若為 則依次把棧中的的運算子加入字尾表示式中,直到出現 從棧中刪除 c.若為 除括號外的其他運算子,當其優先順序高於除 以外的棧頂運算子時,直接入棧。否則從棧頂開始,依次彈出比當前處理的運算子優先順序高和優先順序相等的運算子,...
表示式轉換
7 1 表示式轉換 25 分 算術表示式有字首表示法 中綴表示法和字尾表示法等形式。日常使用的算術表示式是採用中綴表示法,即二元運算子位於兩個運算數中間。請設計程式將中綴表示式轉換為字尾表示式。輸入在一行中給出不含空格的中綴表示式,可包含 以及左右括號 表示式不超過20個字元。在一行中輸出轉換後的字...