#include <bits/stdc++.h>
using
namespace
std;
#define e 2.718281828459045
#define pi 3.141592653589793
double
returnOP(string& word,vector<string>&strarr,
int
& i)
{
double
num1,num2;
if
(strarr[i+1].compare(
"e"
)==0)
num1=e;
if
(strarr[i+1].compare(
"pi"
)==0)
num1=pi;
else
num1=stof(strarr[i+1]);
if
(strarr[i+2].compare(
"e"
)==0)
num2=e;
if
(strarr[i+2].compare(
"pi"
)==0)
num2=pi;
else
num2=stof(strarr[i+2]);
double
degree=pi*num1/180;
if
(word.compare(
"add"
)==0)
return
num1+num2;
else
if
(word.compare(
"subtract"
)==0)
return
num1-num2;
else
if
(word.compare(
"multiply"
)==0)
return
num1*num2;
else
if
(word.compare(
"divide"
)==0)
return
num1/num2;
else
if
(word.compare(
"percent"
)==0)
return
(num2/num1)*100;
else
if
(word.compare(
"log"
)==0)
return
log
(num1)/
log
(num2);
else
if
(word.compare(
"exp"
)==0)
return
pow
(num1,num2);
else
if
(word.compare(
"sqrt"
)==0)
return
sqrt
(num1);
else
if
(word.compare(
"cbrt"
)==0)
return
cbrt(num1);
else
if
(word.compare(
"sin"
)==0)
return
sin
(num1);
else
if
(word.compare(
"cos"
)==0)
return
cos
(num1);
else
if
(word.compare(
"tan"
)==0)
return
tan
(num1);
else
if
(word.compare(
"sec"
)==0)
return
1/
cos
(num1);
else
if
(word.compare(
"cosec"
)==0)
return
1/
sin
(num1);
else
if
(word.compare(
"cot"
)==0)
return
1/
tan
(num1);
else
if
(word.compare(
"sindeg"
)==0)
return
sin
(degree);
else
if
(word.compare(
"cosdeg"
)==0)
return
cos
(degree);
else
if
(word.compare(
"tandeg"
)==0)
return
tan
(degree);
else
if
(word.compare(
"secdeg"
)==0)
return
1/
cos
(degree);
else
if
(word.compare(
"cosecdeg"
)==0)
return
1/
sin
(degree);
else
if
(word.compare(
"cotdeg"
)==0)
return
1/
tan
(degree);
else
if
(word.compare(
"sininv"
)==0)
return
asin
(num1);
else
if
(word.compare(
"cosinv"
)==0)
return
acos
(num1);
else
if
(word.compare(
"taninv"
)==0)
return
atan
(num1);
else
if
(word.compare(
"secinv"
)==0)
return
acos
(1/num1);
else
if
(word.compare(
"cosecinv"
)==0)
return
asin
(1/num1);
else
if
(word.compare(
"cotinv"
)==0)
return
atan
(1/num1);
else
if
(word.compare(
"sininvdeg"
)==0)
return
180*
asin
(num1)/pi;
else
if
(word.compare(
"cosinvdeg"
)==0)
return
180*
acos
(num1)/pi;
else
if
(word.compare(
"taninvdeg"
)==0)
return
180*
atan
(num1)/pi;
else
if
(word.compare(
"secinvdeg"
)==0)
return
180*
acos
(1/num1)/pi;
else
if
(word.compare(
"cosecinvdeg"
)==0)
return
180*
asin
(1/num1)/pi;
else
if
(word.compare(
"cotinvdeg"
)==0)
return
180*
atan
(1/num1)/pi;
return
-1;
}
vector<
double
>processOperations(string& operations)
{
string word;
vector<string>strarr;
vector<
double
>result;
stringstream ss(operations);
while
(ss>>word)
strarr.push_back(word);
for
(
int
i=0;i<strarr.size();i+=3)
result.push_back(returnOP(strarr[i],strarr,i));
return
result;
}
int
main()
{
string operations=
"add 1 1 multiply -2 -1 cosecinvdeg 1.4142135624 -1 percent 100 20"
;
vector<
double
>ans=processOperations(operations);
for
(
auto
& x:ans)
cout<<x<<endl;
return
0;
}