问题描述:
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值的最后四位。
输入格式
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符'+'和乘法运算符'*',且没有括号,所有参与运算的数字均为0到2^{31}-1之间的整数。输入数据保证这一行只有 0~9、'+'、'*'这 12 种字符。(输入字符串长度不超过 600000)
输出格式
输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于 4位时,请只输出最后 4位。不要输出多余的前导零。
样例输入1
1+1*3+4
样例输出1
8
样例输入2
1+1234567890*1
样例输出2
7891
思路:求表达式值得后四位(%10000)取余就能获得后四位
具体代码:
#include<iostream>
using namespace std;
int a[600010];
int main()
{
//1+2*3+4
int x,ans=1,n,p=0;
char c;
cin>>a[1];//为了便于计算,我们先把第一个字符(有可能是数字)输入1
while(scanf("%c",&c)!=EOF)//输入表达式符号+ * +
{
if(c=='\n')//如果输入换行符,那么预示着表达式输入完毕
{
break;
}
scanf("%d",&x);//输入表达式中的数字2 3 4
x=x%10000;//取模 获得后四位2 3 4
if(c=='+')//计算加法的情况
{
a[++ans]=x; //a[2]=2 a[3]=4
}
else//计算乘法的情况
{
n=a[ans];//a[2] n=2
a[ans]=(n*x)%10000;//取模 6 a[2]=6
}
}
for(int i=1; i<=ans; i++)
{
//printf("a[%d]=%d\n",i,a[i]);//可以尝试输出 数组元素
p=p+a[i]; //因为是分别储存的结果,所以要求累加和 a[1]=1 a[2]=6 a[3]=4 1+6+4=11
}
p=p%10000;//取模 获得后四位
printf("%d\n",p);
return 0;
}
\