Description
别人说小火山的计算能力不行,小火山很生气,于是他想证明自己,现在有一个表达式,他想计算出来。
Input
首先是一个t(1<=20)表示测试组数。然后一个表达式,表达式长度不超过200,只有加法和减法,并且保证第一个字符不会是运算符号,最终结果小于2^63-1。
Output
输出运算结果。
Sample Input
2
1+1
2+1-1
Sample Output
2
别人说小火山的计算能力不行,小火山很生气,于是他想证明自己,现在有一个表达式,他想计算出来。
Input
首先是一个t(1<=20)表示测试组数。然后一个表达式,表达式长度不超过200,只有加法和减法,并且保证第一个字符不会是运算符号,最终结果小于2^63-1。
Output
输出运算结果。
Sample Input
2
1+1
2+1-1
Sample Output
2
2
思路:第一次做直接想的是只有一位数额好傻!这道题用字符串做,对于每次输入的数用j储存,先判断上一个字符是不是+-号,不是的话j*10+这个数。对于每次+-号都要保存,在下次+-号时根据上次的+-号进行数学+-。第一次输入的时候可以先把保存加减号的l设为+(解决第一个输入前存无加减号问题),然后最后for循环结束的时候在输出的时候还要在进行一下判断加减计算。因为数加减运算是在判断为+-号后进行,这样最后一个数没有+-号不会进行判断所以在循环结束后判断下。数据较大用long long
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<math.h>
using namespace std;
#define LL long long
char a[110];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(a,0,sizeof(a));
scanf("%s",a);
LL k=strlen(a),sum=0,j=0,i;
char l=0;
for(i=0;i<k;i++)
{
if(a[i]!='+'&&a[i]!='-')
{
if(a[i-1]!='+'&&a[i-1]!='-')
j*=10;
j+=(a[i]-'0');
}
else
{
if(l=='+')
sum+=j;
else if(l=='-')
sum-=j;
else
sum+=j;
l=a[i];
j=0;
}
}
if(l=='+')
sum+=j;
else if(l=='-')
sum-=j;
else
sum+=j;
printf("%lld\n",sum);
}
return 0;
}