Description
ZZ自从上大学以来,脑容量就是以SB计算的,这个吃货竟然连算术运算也不会了,可是当今的计算机可是非常强大的,作为ACMer, 几个简单的算术又算得了什么呢?可是该怎么做呢?ZZ只想算简单的加减乘除,由于大脑钝化,ZZ连小数都没有概念了!
Input
有多组测试数据,每组测试数据为一个字符串,字符串的长度不超过50,字符串为合法的算术运算,运算符号只包含+、-、*、/,数据为整数.
Output
请输出正确的结果,除数为0的时候,输出impossible。(结果保证在长整形之内)
Sample Input
1+1*2 2/2+1
Sample Output
3 2
终于AC了,比赛的时候总是WA,此题的关键在于字符串的处理,昨天用字符串覆盖和符号覆盖处理过的数据,没有考虑连乘的问题如1-1*2*3;导致WA。。。
#include<cstring> #include<cstdio> using namespace std; char str[60]; char sign[60]; long long num[60]; int main() { long long cnt,sum; loop:while(scanf("%s",str)!=EOF){ cnt=0; sum=0; memset(num,0,sizeof(num)); int len=strlen(str); for(int i=0;i<len;i++){ if(str[i]=='+'||str[i]=='-'||str[i]=='*'||str[i]=='/') sign[cnt++]=str[i]; else num[cnt]=num[cnt]*10+str[i]-'0'; } for(int i=0;i<cnt;i++) { //printf("%c ",sign[i]); if(sign[i]=='*') { num[i+1]=num[i]*num[i+1]; sign[i]=sign[i-1]; num[i]=0; } if(sign[i]=='/') { if(num[i+1]==0){ printf("impossible\n"); goto loop; } num[i+1]=num[i]/num[i+1]; num[i]=0; sign[i]=sign[i-1]; } } num[0]=num[0]; for(int i=1;i<=cnt;i++) { if(sign[i-1]=='+') num[i]=num[i]; if(sign[i-1]=='-') num[i]=-num[i]; } for(int i=0;i<=cnt;i++){ sum+=num[i]; } printf("%lld\n",sum); } return 0; }