小火山的计算能力
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 471 Solved: 123
Description
别人说小火山的计算能力不行,小火山很生气,于是他想证明自己,现在有一个表达式,他想计算出来。
Input
首先是一个t(1<=20)表示测试组数。然后一个表达式,表达式长度不超过200,只有加法和减法,并且保证第一个字符不会是运算符号,最终结果小于2^63-1。
Output
输出运算结果。
Sample Input
2 1+1 2+1-1
Sample Output
2 2
这道题挺坑的刚开始想的是先输出字符串,然后再逐个找出数字跟字符,然而比赛时并没有敲出来具体代码。。后来先输入数字,再输入符号,结果是对了,然而超时。。赛后看别人的解题思路,还是要先整体输入。。看代码:
#include<cstdio>
#include<cstring>
int main(){
int t;
char ch[205];
scanf("%d",&t);
while(t--){
scanf("%s",ch);
int i=0,l=strlen(ch);
long long sum=0;//最后总和
long long ans=0;//暂存每一位数
while(ch[i]>='0'&&ch[i]<='9') {//找第一个数
sum=sum*10+ch[i]-'0';
i++;//一直循环到符号位
}
char sign;//符号
while(i<l){
sign=ch[i];
i++;
ans=0;
while(ch[i]>='0'&&ch[i]<='9') {
ans=ans*10+ch[i]-'0';
i++;//与找第一个数类似
}
if(sign=='-')
sum-=ans;
if(sign=='+')
sum+=ans;
}
printf("%lld\n",sum);
}
return 0;
}
再来个比赛时敲出来的
超时代码!!欢迎评价。。
#include<cstdio>
long long a,b,k,sum;
int main(){
int t;
char s;
scanf("%d",&t);
while(t--){
scanf("%lld",&a);
while(scanf("%c",&s)&&(s!='\n')){
scanf("%lld",&b);
if(s=='+')
a+=b;
else
a-=b;
}
printf("%lld\n",a);
}
return 0;
}