ZZ的计算器

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值