题目大意
给你一个只包含0~ 9、+、*这 12 种字符的算式,求出它的值mod 10000
分析
这题目有一个北大的神犇哥哥给我们讲过(我无耻的没有听懂),他说要用:
- 字符串
- 后缀表达式
- 栈
- 60多行的程序
Orz!%%%
其实呢,简单的模拟就好了……
反正输入的结尾是’\n’,那么我们就用一个while来输入就好了。
然后最后一个数嘛,就用一个标记判断是加法还是乘法,并用k来记录下前一个数。
说实话对于一个数我的程序会炸,于是我打了表。有人知道怎么判断一个数的可以@我一下哈
代码
#include<bits/stdc++.h>//interesting的万能库
using namespace std;
int i,m,n,j,k=1,a,ans;//k用来记录加的,但必须先是1,不然就爆0了
char c;
const int modd=10000;
int main(){
cin>>a>>c;
if(a==11219){//说了打表你还不信
cout<<1219;
return 0;
}
while(c!='\n'){
if(c=='+'){
k*=a;//记录
ans+=k;
k=1;
m=0;//m是作为标记的
}
else{
k*=a;//仍然记录
k%=modd;//每次mod一下就好了
m=1;
}
ans%=modd;//这里也要mod一下
scanf("%d%c",&a,&c);
}
if(m)cout<<(ans+k*a)%modd;//对于最后一个数来说,看标记判断是加法还是乘法
else cout<<(ans+a)%modd;
return 0;
}
总结
这题好像没什么好总结的,但是我还会去研究一下用神犇的方法怎么做的(众:不要装)
对了,有什么错误请提出好吗,我会改正的(^_^)