C++プログラムでの逆ポーランド記法の評価
逆ポーランド記法があり、値を評価する必要があるとします。逆ポーランド記法は、後置式とも呼ばれます。ここでは、スタックデータ構造を使用して接尾辞式を解決する必要があります。
後置式から、いくつかのオペランドが見つかった場合、それらをスタックにプッシュします。演算子が見つかると、スタックから2つのアイテムがポップされ、正しい順序で操作が実行されます。その後、結果は将来の使用のためにスタックにもプッシュされます。式全体が完成すると、最終結果もスタックトップに格納されます。したがって、式が「53 + 62 / * 35 * +」の場合、答えは39
になります。手順を見てみましょう-
- 後置式の文字chごとに、
- を実行します。
- chが演算子☉の場合、
- a:=スタックから最初の要素をポップします
- b:=スタックから2番目の要素をポップします
- res:=b☉a
- 解像度をスタックにプッシュします
- それ以外の場合、chがオペランドの場合、
- スタックにchを追加
- chが演算子☉の場合、
- スタックトップの要素を返す
理解を深めるために、次の実装を見てみましょう-
#include<iostream>
#include<cmath>
#include<stack>
#include<climits>
using namespace std;
float scanNum(char ch){
int value;
value = ch;
return float(value-'0');//return float from character
}
int isOperator(char ch){
if(ch == '+'|| ch == '-'|| ch == '*'|| ch == '/' || ch == '^')
return 1;//character is an operator
return -1;//not an operator
}
int isOperand(char ch){
if(ch >= '0' && ch <= '9')
return 1;//character is an operand
return -1;//not an operand
}
float operation(int a, int b, char op){
//Perform operation
if(op == '+')
return b+a;
else if(op == '-')
return b-a;
else if(op == '*')
return b*a;
else if(op == '/')
return b/a;
else if(op == '^')
return pow(b,a); //find b^a
else
return INT_MIN; //return negative infinity
}
float postfixEval(string postfix){
int a, b;
stack<float> stk;
string::iterator it;
for(it=postfix.begin(); it!=postfix.end(); it++){
//read elements and perform postfix evaluation
if(isOperator(*it) != -1){
a = stk.top();
stk.pop();
b = stk.top();
stk.pop();
stk.push(operation(a, b, *it));
}
else if(isOperand(*it) > 0){
stk.push(scanNum(*it));
}
}
return stk.top();
}
main(){
string post = "53+62/*35*+";
cout << "The result is: "<<postfixEval(post);
} 入力
"53+62/*35*+"
出力
The result is: 39
-
数値を逆にするC++プログラム
数字を逆にするということは、その数字を逆の順序で保存することを意味します。 例:番号が6529の場合、9256が出力に表示されます。 数を逆にするプログラムは次のように与えられます- 例 #include <iostream> using namespace std; int main() { int num = 63972, rev = 0; while(num > 0) { rev = rev*10 + num%10; num = n
-
C++で三項式を評価するプログラム
三項式を保持する式があるとすると、式の結果を評価する必要があります。 TrueとFalseのTとF、および「?」などのいくつかの値をサポートします。および「:」文字。いくつかのプロパティがあります: 指定された文字列の長さは10000以下である必要があります。 条件式は右から左にグループ化します。 条件は常にTまたはFのいずれかになります。したがって、条件が数字になることはありません。 式の結果は常にTまたはFに評価されます。 たとえば、入力が「T? T? F:T:T」なので、出力はFになります。 これを解決するには、次の手順に従います。 ret:=空の文字列、n:=sのサイズ、