转自某位大佬
题目描述:
给定一行表达式,中间没有空格,输出表达式的计算结果。测试数据保证在 int 范围之内。
这是简单的一个题目,只涉及加法和减法。
输入描述:
一行表达式
输出描述:
表达式的计算结果
样例输入:
12+21-0
样例输出:
33
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
int str2int(string str)
{
int ret = 0;
bool flg = (str[0]=='-');
for(int i = (flg==true?1:0);str[i]!=' ';i++)
{
if(i>0)
ret*=10;
ret+=str[i]-'0';
}
return flg==true?-ret:ret;
}
string int2str(int n)
{
bool flg=(n<0);
string ret="";
for(n=(flg==true?-n:n);n>0;n/=10)ret=char((n%10)+'0')+ret;
if(flg==true)ret='-'+ret;
return ret;
}
int cal1(string exp)
{
int a,b,c,i,j;
while(1)
{
bool flg=false;
for(int i=exp[0]=='-'?1:0;exp[i]!=' ';i++)if(exp[i]=='+' || exp[i]=='-')flg=true;
if(flg==false) return(str2int(exp));
bool f=(exp[0]=='-');
if(f==true)exp=exp.substr(1,exp.length()-1);
for(i = 0;exp[i]!=' '&& exp[i]!='+' && exp[i]!='-';i++)
continue;
for(j = i+1;exp[j]!=' '&& exp[j]!='+' && exp[j]!='-';j++)
continue;
a = str2int(exp.substr(0,i));
b = str2int(exp.substr(i+1,j-i-1));
a=(f==true?-a:a);
if(exp[i]=='-')
c = a-b;
else
c = a+b;
exp=exp.substr(j,exp.length()-j);
exp=int2str(c)+exp;
}
}
int main()
{
char OJtmp[1001];
string expression;
while(scanf("%s",OJtmp)!=EOF)
{
expression=OJtmp;
cout<<cal1(expression)<<endl;
}
return 0;
}