题解 | #四则运算#
四则运算
http://www.nowcoder.com/practice/9999764a61484d819056f807d2a91f1e
#include<iostream>
#include<string>
#include<cmath>
using namespace std;
string v(string w)
{
if (w[0] == '-')
{
for (int i = 1; i < w.length(); i++)
{
if (w[i] == '-')
{
w[i] = '+';
}
else if (w[i] == '+')
{
w[i] = '-';
}
}
}
w = w.substr(1, w.length() - 1);
return(w);
}
string a(string b)
{
int u = 0;
if(b[0]=='-')
{
b = v(b);
u++;
}
for (int i = 0; i < b.size(); i++)
{
if (b[i] == '*' || b[i] == '/')
{
int f = 0, m;
for (int j = i - 1; j >= 0; j--)
{
if (b[j] >= '0' && b[j] <= '9')
{
f = f + (b[j] - '0') * pow(10, i - 1 - j);
m = j;
}
else
{
break;
}
}
int g = 0, n;
for (int j = i + 1; j < b.length(); j++)
{
if (b[j] >= '0' && b[j] <= '9')
{
g = g * 10 + b[j] - '0';
n = j;
}
else
{
break;
}
}
if (b[i] == '*')
{
int h = f * g;
string o = to_string(h);
b = b.substr(0, m) + o + b.substr(n + 1, b.length() - n);
if (b[0] == '-')
{
b = v(b);
u++;
}
i = -1;
}
else if (b[i] == '/')
{
int h = f / g;
string o = to_string(h);
b = b.substr(0, m) + o + b.substr(n + 1, b.length() - n);
if (b[0] == '-')
{
b = v(b);
u++;
}
i = -1;
}
}
}
for (int i = 0; i < b.size(); i++)
{
if (b[i] == '+' || b[i] == '-')
{
int f = 0, m;
for (int j = i - 1; j >= 0; j--)
{
if (b[j] >= '0' && b[j] <= '9')
{
f = f + (b[j] - '0') * pow(10, i - 1 - j);
m = j;
}
else
{
break;
}
}
int g = 0, n;
for (int j = i + 1; j < b.length(); j++)
{
if (b[j] >= '0' && b[j] <= '9')
{
g = g * 10 + b[j] - '0';
n = j;
}
else
{
break;
}
}
if (b[i] == '+')
{
int h = f + g;
string o = to_string(h);
b = b.substr(0, m) + o + b.substr(n + 1, b.length() - n);
if (b[0] == '-')
{
b = v(b);
u++;
}
i = -1;
}
else if (b[i] == '-')
{
int h = f - g;
string o = to_string(h);
b = b.substr(0, m) + o + b.substr(n + 1, b.length() - n);
if (b[0] == '-')
{
b = v(b);
u++;
}
i = -1;
}
}
}
if (b[0] == '-')
{
u++;
}
if(u%2==1)
{
b = '-' + b;
}
return(b);
}
int main()
{
string w;
while(cin>>w){
for (int i = 0; i < w.length(); i++)
{
if (w[i] == ')')
{
for (int j = i - 1; j >= 0; j--)
{
if (w[j] == '(')
{
string c = a(w.substr(j + 1, i - j - 1));
if(c[0]=='-')
{
int x = 0;
c = c.substr(1, c.length() - 1);
for(int m=j-1;m>=0;m--)
{
if(w[m]=='+')
{
w[m] = '-';
x = 1;
break;
}
else if (w[m] == '-'&&m==0)
{
w=w.substr(1,w.length()-1);
x = 1;
j--;
i--;
break;
}
else if (w[m] == '-' && m > 0)
{
w[m] = '+';
x = 1;
break;
}
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
if (x == 0)
{
w = '-' + w;
}
i = -1;
goto y;
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
i = -1;
y:
break;
}
}
}
}
for (int i = 0; i < w.length(); i++)
{
if (w[i] == ']')
{
for (int j = i - 1; j >= 0; j--)
{
if (w[j] == '[')
{
string c = a(w.substr(j + 1, i - j - 1));
if(c[0]=='-')
{
int x = 0;
c = c.substr(1, c.length() - 1);
for(int m=j-1;m>=0;m--)
{
if(w[m]=='+')
{
w[m] = '-';
x = 1;
break;
}
else if (w[m] == '-'&&m==0)
{
w=w.substr(1,w.length()-1);
x = 1;
j--;
i--;
break;
}
else if (w[m] == '-' && m > 0)
{
w[m] = '+';
x = 1;
break;
}
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
if (x == 0)
{
w = '-' + w;
}
i = -1;
goto yy;
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
i = -1;
yy:
break;
}
}
}
}
for (int i = 0; i < w.length(); i++)
{
if (w[i] == '}')
{
for (int j = i - 1; j >= 0; j--)
{
if (w[j] == '{')
{
string c = a(w.substr(j + 1, i - j - 1));
if(c[0]=='-')
{
int x = 0;
c = c.substr(1, c.length() - 1);
for(int m=j-1;m>=0;m--)
{
if(w[m]=='+')
{
w[m] = '-';
x = 1;
break;
}
else if (w[m] == '-'&&m==0)
{
w=w.substr(1,w.length()-1);
x = 1;
j--;
i--;
break;
}
else if (w[m] == '-' && m > 0)
{
w[m] = '+';
x = 1;
break;
}
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
if (x == 0)
{
w = '-' + w;
}
i = -1;
goto yyy;
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
i = -1;
yyy:
break;
}
}
}
}
w = a(w);
cout << w;
}
return(0);
}
#include<string>
#include<cmath>
using namespace std;
string v(string w)
{
if (w[0] == '-')
{
for (int i = 1; i < w.length(); i++)
{
if (w[i] == '-')
{
w[i] = '+';
}
else if (w[i] == '+')
{
w[i] = '-';
}
}
}
w = w.substr(1, w.length() - 1);
return(w);
}
string a(string b)
{
int u = 0;
if(b[0]=='-')
{
b = v(b);
u++;
}
for (int i = 0; i < b.size(); i++)
{
if (b[i] == '*' || b[i] == '/')
{
int f = 0, m;
for (int j = i - 1; j >= 0; j--)
{
if (b[j] >= '0' && b[j] <= '9')
{
f = f + (b[j] - '0') * pow(10, i - 1 - j);
m = j;
}
else
{
break;
}
}
int g = 0, n;
for (int j = i + 1; j < b.length(); j++)
{
if (b[j] >= '0' && b[j] <= '9')
{
g = g * 10 + b[j] - '0';
n = j;
}
else
{
break;
}
}
if (b[i] == '*')
{
int h = f * g;
string o = to_string(h);
b = b.substr(0, m) + o + b.substr(n + 1, b.length() - n);
if (b[0] == '-')
{
b = v(b);
u++;
}
i = -1;
}
else if (b[i] == '/')
{
int h = f / g;
string o = to_string(h);
b = b.substr(0, m) + o + b.substr(n + 1, b.length() - n);
if (b[0] == '-')
{
b = v(b);
u++;
}
i = -1;
}
}
}
for (int i = 0; i < b.size(); i++)
{
if (b[i] == '+' || b[i] == '-')
{
int f = 0, m;
for (int j = i - 1; j >= 0; j--)
{
if (b[j] >= '0' && b[j] <= '9')
{
f = f + (b[j] - '0') * pow(10, i - 1 - j);
m = j;
}
else
{
break;
}
}
int g = 0, n;
for (int j = i + 1; j < b.length(); j++)
{
if (b[j] >= '0' && b[j] <= '9')
{
g = g * 10 + b[j] - '0';
n = j;
}
else
{
break;
}
}
if (b[i] == '+')
{
int h = f + g;
string o = to_string(h);
b = b.substr(0, m) + o + b.substr(n + 1, b.length() - n);
if (b[0] == '-')
{
b = v(b);
u++;
}
i = -1;
}
else if (b[i] == '-')
{
int h = f - g;
string o = to_string(h);
b = b.substr(0, m) + o + b.substr(n + 1, b.length() - n);
if (b[0] == '-')
{
b = v(b);
u++;
}
i = -1;
}
}
}
if (b[0] == '-')
{
u++;
}
if(u%2==1)
{
b = '-' + b;
}
return(b);
}
int main()
{
string w;
while(cin>>w){
for (int i = 0; i < w.length(); i++)
{
if (w[i] == ')')
{
for (int j = i - 1; j >= 0; j--)
{
if (w[j] == '(')
{
string c = a(w.substr(j + 1, i - j - 1));
if(c[0]=='-')
{
int x = 0;
c = c.substr(1, c.length() - 1);
for(int m=j-1;m>=0;m--)
{
if(w[m]=='+')
{
w[m] = '-';
x = 1;
break;
}
else if (w[m] == '-'&&m==0)
{
w=w.substr(1,w.length()-1);
x = 1;
j--;
i--;
break;
}
else if (w[m] == '-' && m > 0)
{
w[m] = '+';
x = 1;
break;
}
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
if (x == 0)
{
w = '-' + w;
}
i = -1;
goto y;
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
i = -1;
y:
break;
}
}
}
}
for (int i = 0; i < w.length(); i++)
{
if (w[i] == ']')
{
for (int j = i - 1; j >= 0; j--)
{
if (w[j] == '[')
{
string c = a(w.substr(j + 1, i - j - 1));
if(c[0]=='-')
{
int x = 0;
c = c.substr(1, c.length() - 1);
for(int m=j-1;m>=0;m--)
{
if(w[m]=='+')
{
w[m] = '-';
x = 1;
break;
}
else if (w[m] == '-'&&m==0)
{
w=w.substr(1,w.length()-1);
x = 1;
j--;
i--;
break;
}
else if (w[m] == '-' && m > 0)
{
w[m] = '+';
x = 1;
break;
}
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
if (x == 0)
{
w = '-' + w;
}
i = -1;
goto yy;
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
i = -1;
yy:
break;
}
}
}
}
for (int i = 0; i < w.length(); i++)
{
if (w[i] == '}')
{
for (int j = i - 1; j >= 0; j--)
{
if (w[j] == '{')
{
string c = a(w.substr(j + 1, i - j - 1));
if(c[0]=='-')
{
int x = 0;
c = c.substr(1, c.length() - 1);
for(int m=j-1;m>=0;m--)
{
if(w[m]=='+')
{
w[m] = '-';
x = 1;
break;
}
else if (w[m] == '-'&&m==0)
{
w=w.substr(1,w.length()-1);
x = 1;
j--;
i--;
break;
}
else if (w[m] == '-' && m > 0)
{
w[m] = '+';
x = 1;
break;
}
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
if (x == 0)
{
w = '-' + w;
}
i = -1;
goto yyy;
}
w = w.substr(0, j) + c + w.substr(i + 1, w.length() - 1 - i);
i = -1;
yyy:
break;
}
}
}
}
w = a(w);
cout << w;
}
return(0);
}