Run Code
|
API
|
Code Wall
|
Users
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Blog
basic caculate iii
Language:
Ada
Assembly
Bash
C#
C++ (gcc)
C++ (clang)
C++ (vc++)
C (gcc)
C (clang)
C (vc)
Client Side
Clojure
Common Lisp
D
Elixir
Erlang
F#
Fortran
Go
Haskell
Java
Javascript
Kotlin
Lua
MySql
Node.js
Ocaml
Octave
Objective-C
Oracle
Pascal
Perl
Php
PostgreSQL
Prolog
Python
Python 3
R
Rust
Ruby
Scala
Scheme
Sql Server
Swift
Tcl
Visual Basic
Layout:
Vertical
Horizontal
// Calculate III // The expression string may contain (, ) +, -, *, /, and empty spaces. // Input: "2*(1+2*5-2/2)+1" = 21 #include <iostream> #include <stack> #include <vector> using namespace std; long eNum(string& s, int& i) { long n = 0; while(i < s.length() && isdigit(s[i])) n = s[i++] - '0' + 10 * n; return n; } long experssion(string& s, int& i) { vector<long> nums; // you can use either vector or stack char op = '+'; for (; i < s.length() && op != ')'; i++) { // op can take value of +, -, *, / & ) if (s[i] == ' ') continue; // skip for space long n = s[i] == '(' ? experssion(s, ++i) : eNum(s, i); switch(op) { case '+' : nums.push_back(n); break; case '-' : nums.push_back(-n); break; case '*' : nums.back() *= n; break; case '/' : nums.back() /= n; break; } op = s[i]; } long res = 0; // return results for (int n : nums) res += n; return res; } int calculate(string s) { int i = 0; return experssion(s, i); } int main(){ string s = "2*(5+5*2)/3+(6/2+8)"; // = 21 cout << s << " = " << calculate(s) << endl; }
g++
Show compiler warnings
[
+
] Compiler args
[
+
]
Show input
Compilation time: 0.63 sec, absolute running time: 0.1 sec, cpu time: 0.02 sec, memory peak: 3 Mb, absolute service time: 0,74 sec
edit mode
|
history
|
discussion
2*(5+5*2)/3+(6/2+8) = 21