Yukicoder緑<No.42B>
問題
問題はこちら
問題文↓
'+'は掛け算を表す演算子、'*'は足し算を表す演算子です 式が与えられるので、左から順番にこの計算をしてください
解法
演算子の定義を間違えずに、左から順番に見ていく
演算子が来たら、前の演算子を計算して、保存を繰り返す
#include <bits/stdc++.h> using namespace std; #define rep(i, n) for (ll i = 0; i < (n); ++i) #define rep1(i, n) for (ll i = 1; i < (n); ++i) #define rrep(i, n) for (ll i = n; i > 0; --i) #define bitrep(i, n) for (ll i = 0; i < (1 << n); ++i) #define all(a) (a).begin(), (a).end() #define rall(a) (a).rbegin(), (a).rend() #define yesNo(b) ((b) ? "Yes" : "No") using ll = long long; using ull = unsigned long long; using ld = long double; string alphabet = "abcdefghijklmnopqrstuvwxyz"; string ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; const double pi = 3.141592653589793; int smallMOD = 998244353; int bigMOD = 1000000007; int main() { string s; cin >> s; string num1 = ""; string num2 = ""; char op = 'x'; rep(i, s.size()) { if (s[i] == '+' || s[i] == '*') { if (op == 'x') { op = s[i]; num1 = num2; num2 = ""; } else { if (op == '*') num1 = to_string(stoi(num1) + stoi(num2)); else num1 = to_string(stoi(num1) * stoi(num2)); num2 = ""; op = s[i]; } } else num2 += s[i]; } if (op == '*') num1 = to_string(stoi(num1) + stoi(num2)); else num1 = to_string(stoi(num1) * stoi(num2)); cout << num1 << endl; return 0; }