给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值的最后四位。
输入格式
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符'+'
和乘法运算符'*'
,且没有括号,所有参与运算的数字均为 0 到 231−1 之间的整数。输入数据保证这一行只有 0~9
、'+'
、'*'
这 12 种字符。(输入字符串长度不超过 600000)
输出格式
输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 4 位时,请只输出最后 4 位。不要输出多余的前导零。
样例输入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;
}
}
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去。