目次
接尾語表現 5 点(100 点)
いわゆるサフィックス式とは、このような式を指します。式では括弧は引用符で囲まれなくなり、演算記号は 2 つのオペランドの後に配置され、すべての計算は演算記号が現れる順序で左から右に厳密に実行されます。 (オペレータの優先順位に関係なく)。
たとえば、中置式 3*(5–2)+7 は、接尾式 352-*7+ に対応します。
指定された中置式を後置式に変換して出力してください。
入力形式:
中置式は 1 行のみ入力し、式内の数値はすべて 1 桁で、式の長さは 1000 未満です。
出力フォーマット:
接尾辞式を 1 行出力します。式内にスペースは含まれません。
入力サンプル:
2+4*8+(8*8+1)/3
出力例:
248*+88*1+3/+
#include<iostream>
#include<cstdio>
#include<cstring>
名前空間 std を使用します。
char c1[1002],c2[1002],c3[1002];
int main()
{
int i,top=0,v=-1;
scanf("%s",c1);
// int k=c1.length() ;
int k=strlen(c1);
for(i=0;i<k;i++)
{ switch(c1[i]) { case '(':c2[++top]=c1[i];break; case '+': case '-': while(top>0&&c2[top]!='(') { c3[++v]=c2[top]; top--; } c2[++top]=c1[i];
case '*':
case '/':while(top>0&&c2[top]!='('&&c2[top]!='+'&&c2[top]!='-') { c3[++v
] = c2[トップ]; トップ--; } c2[++トップ]=c1[i]; ブレーク; case ')':while(c2[トップ]!='(') { c3[++v]=c2 [トップ]; トップ--; } トップ--; ブレーク; case ',':break; デフォルト :c3[++v]=c1[i]; } } while(top>0&&c2[top]!='(') { c3[++v]=c2[トップ];
上 - ;
for(i=0;i <
k;i++)
cout<<c3[i];
0を返します。
}
6 接尾語表現の計算(100点)
Kunkun 先輩は、学生がこの知識ポイントを理解する必要があると考えています。つまり、接尾辞表現は、接尾辞表現よりもコンピュータにとって理解し、学習しやすいということです。今、クンクン先輩は一連の接尾辞表現を与えています。この接尾辞表現の値を計算するのを手伝ってもらえますか?
入力形式:
最初の行には、サフィックス式の長さ n (1<=n<=25000) が入力されます。
2 行目に接尾辞式を表す文字列を入力します (入力された接尾辞式が正当であることを保証するために、各データまたは記号はカンマで区切られ、中間結果を含む各数値が Long Long Long 整数の範囲を超えないことが保証されます)。
出力フォーマット:
後置式の値である整数を出力します。
入力例1:
6
10,2,+
出力サンプル 1:
12
入力例2:
14
2,10,2,+,6,/,-
出力例 2:
0
#include<iostream>
#include<string>
#include<cstdio>
#include<cmath>
名前空間 std を使用します。
Long Long int num[25000]={0},j=0;
int main()
{ 文字列 q; Long Long int i,l,k=0,qq,ji=0; char c=','; シン>>l>>q; for(i=0;i<l;i++) { if(q[i]!=c) { if(q[i]>='0'&&q[i]<='9')//×è± ä³ÉÊý×Ö { for(qq=i;q[qq]!=c;qq++) { num[j]=num[j]*10+q[qq]-'0'; じ++;
継続的に;
}
else if(q[i]=='-')
{ if(q[i+1]==c||q[i+1]=='\0')//ÊǼõºÅ { num[j-2] ]=num[j-2]-num[j-1];num[j-1]=0;j--;Continue;} else //ÊǸºÊý { for(qq=i+1;q[qq ]!=c;qq++) { num[j]=num[j]*10+q[qq]-'0'; じ++; num [ j]=0-num[j]; i+=ji;ji=0;j++; 継続的に; } } それ以外の場合は {
switch(q[i])
{ case '*':num[j-2]=num[j-2]*num[j-1];num[j-1]=0;j--;break; case '/':num[j-2]=num[j-2]/num[j-1];num[j-1]=0;j--;break; case '+':num[j-2]=num[j-2]+num[j-1];num[j-1]=0;j--;break; cout << num [ 0]; 0を返します。}