您的位置:首页 > 其它

【蓝桥杯-基础训练】*+表达式求值

2018-02-02 16:29 253 查看
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值的最后四位。


输入格式

输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符
'+'
和乘法运算符
'*'
,且没有括号,所有参与运算的数字均为 00 到 2^{31}-1231−1 之间的整数。输入数据保证这一行只有 
0~9
'+'
'*'
这 1212 种字符。(输入字符串长度不超过 600000600000)


输出格式

输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 44 位时,请只输出最后 44 位。不要输出多余的前导零。


样例输入1

1+1*3+4



样例输出1

8



样例输入2

1+1234567890*1



样例输出2

7891


#include<iostream>
#include<bits/stdc++.h>
using namespace std;

int main()
{
int tempx=1;
int temp=0;
int ans=0;
char buff;
while(cin>>buff)
{
if(buff>='0' && buff<='10')
{
temp*=10;
temp+=(buff-'0');
}
if(buff=='+')
{
if(tempx!=1)
{
tempx*=temp;
tempx%=10000;
ans%=10000;
ans+=tempx;
ans%=10000;
tempx=1;
temp=0;
}
else
{
temp%=10000;
ans%=10000;
ans+=temp;
ans%=10000;
temp=0;
}
}
if(buff=='*')
{
tempx*=temp;
tempx=tempx%10000;
ans=ans%10000;
temp=0;
}

a664
}
if(tempx==1)
{
ans+=temp%10000;
ans%=10000;
}
else
{
tempx*=temp;
ans+=tempx%10000;
ans%=10000;
}
cout<<ans%10000<<endl;
return 0;
}抓住一个关键思路:乘用tempx储存,只在遇到+或者到末尾之后才加到ans去。若遇到加号,则把之前的乘数加到ans去,若之前无乘数(则前面都是加号),则直接把temp加到ans去。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: