Description
别人说小火山的计算能力不行,小火山很生气,于是他想证明自己,现在有一个表达式,他想计算出来。
Input
首先是一个t(1<=20)表示测试组数。然后一个表达式,表达式长度不超过200,只有加法和减法,并且保证第一个字符不会是运算符号,最终结果小于2^63-1。
Output
输出运算结果。
Sample Input
2
1+1
2+1-1
Sample Output
2
2
题目中限制结果小于2^63-1 用long long去做就可以 其他的直接看代码 代码很容易理解
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
char a[2016];
int vis[201];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(vis,0,sizeof(vis));
scanf("%s",a);
int len=strlen(a);
for(int i=0;i<len;i++)
{
if(a[i]=='+'||a[i]=='-')
vis[i]=1;
}
a[len]='+'; //这里对a[len]赋值有两个用处
int j=len; //这是第一个用处 让sum开始直接加上第一个数
vis[len]=1;
long long ans=0,sum=0;
for(int i=0;i<=len;i++)//注意包括len 否则最后一个数会加不上 因为没有判定到vis[]=1 这是第二个用处
{
if(vis[i]==0)
{
ans=ans*10+a[i]-'0';
}
else
{
if(a[j]=='+')
{
sum+=ans;
}
if(a[j]=='-')
{
sum-=ans;
}
j=i;//替换符号的 ip
ans=0;
}
}
printf("%lld ",sum);
}
return 0;
}
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
char a[2016];
int vis[201];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(vis,0,sizeof(vis));
scanf("%s",a);
int len=strlen(a);
for(int i=0;i<len;i++)
{
if(a[i]=='+'||a[i]=='-')
vis[i]=1;
}
a[len]='+'; //这里对a[len]赋值有两个用处
int j=len; //这是第一个用处 让sum开始直接加上第一个数
vis[len]=1;
long long ans=0,sum=0;
for(int i=0;i<=len;i++)//注意包括len 否则最后一个数会加不上 因为没有判定到vis[]=1 这是第二个用处
{
if(vis[i]==0)
{
ans=ans*10+a[i]-'0';
}
else
{
if(a[j]=='+')
{
sum+=ans;
}
if(a[j]=='-')
{
sum-=ans;
}
j=i;//替换符号的 ip
ans=0;
}
}
printf("%lld ",sum);
}
return 0;
}