C++の基本的な電卓
基本的な式の結果を見つける1つの基本的な計算機を作成するとします。式は、開き括弧と閉じ括弧、プラスまたはマイナス記号、および空のスペースを保持できます。
したがって、文字列が「5 + 2-3」のような場合、結果は7になります
これを解決するには、次の手順に従います-
-
ret:=0、sign:=1、num:=0、n:=sのサイズ
-
1つのスタックstを定義する
-
iを初期化する場合:=0、i
-
サイズiの配列x=sを定義します
-
x>='0'およびx<='9'の場合、
-
num =num * 10
-
num =num +(x-'0')
-
-
それ以外の場合、xが'('と同じ場合、-
-
ret =ret +(sign * num)
-
stにretを挿入します
-
stに記号を挿入
-
ret:=0、sign:=1、num:=0
-
-
それ以外の場合、xが')'と同じ場合、-
-
ret =ret +(sign * num)、sign:=1、num:=0
-
ret =ret*stの最上位要素
-
stからアイテムを削除
-
ret =ret+stの最上位要素
-
stからアイテムを削除
-
-
それ以外の場合、xが'+'と同じ場合、-
-
ret =ret +(sign * num)、sign:=1、num:=0
-
-
それ以外の場合、xが'-'と同じ場合、-
-
ret =ret +(sign * num)、sign:=-1、num:=0
-
-
-
numがゼロ以外の場合、
-
ret =ret + sign * num
-
-
retを返す
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: int calculate(string s) { int ret = 0; int sign = 1; int num = 0; int n = s.size(); stack <int> st; for(int i = 0; i < n; ++i){ char x = s[i]; if(x >= '0' && x <= '9'){ num *= 10; num += (x - '0'); } else if(x == '('){ ret += (sign * num); st.push(ret); st.push(sign); ret = 0; sign = 1; num = 0; } else if(x == ')'){ ret += (sign * num); sign = 1; num = 0; ret *= st.top(); st.pop(); ret += st.top(); st.pop(); } else if(x == '+'){ ret += (sign * num); sign = 1; num = 0; } else if(x == '-'){ ret += (sign * num); sign = -1; num = 0; } } if(num){ ret += sign * num; } return ret; } }; main(){ Solution ob; cout << (ob.calculate("5 + 2 - 3")); }
入力
"5 + 2 - 3"
出力
4
-
C++でゲームVをジャンプする
arrと呼ばれる整数の配列と整数dがあるとします。 1つのステップで、インデックスiから-にジャンプできます。 i + xここで、i +x
-
C++の4つの除数
整数配列numsがあるとすると、正確に4つの除数を持つその配列内の整数の約数の合計を見つける必要があります。したがって、配列にそのような整数がない場合は、0を返します。たとえば、入力が[21、4、7]の場合、21には4つの除数1、3、7、21があるため、出力は32になります。 4には3つの除数1、2、4があり、7には2つの除数1と7があります。答えは21の約数の合計のみです。 これを解決するには、次の手順に従います- ok()というメソッドを定義します。これはxを入力として受け取ります ret:=1 + x、cnt:=2 i:=2の場合、i ^ 2 <=x、iを1増やしま