NOIP201302表达式求值
题目描述 Description
给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。
输入仅有一行,为需要你计算的表达式,表达式中只包含数字、加法运算符“+”和乘法运算符“*”,且没有括号,所有参与运算的数字均为0到2^31-1之间的整数。输入数据保证这一行只有0~9、+、*这12种字符。
输出只有一行,包含一个整数,表示这个表达式的值。注意:当答案长度多于4位时,请只输出最后4位,前导0不输出。
[Sample 1]
1+1*3+4
[Sample 2]
1+1234567890*1
[Sample 3]
1+1000000003*1
样例输出 Sample Output
[Sample 1]
1+1*3+4
[Sample 2]
1+1234567890*1
[Sample 3]
1+1000000003*1
样例输出 Sample Output
[Sample 1]
1+1*3+4
[Sample 2]
1+1234567890*1
[Sample 3]
1+1000000003*1
样例输出 Sample Output
[Sample 1]
8
[Sample 2]
7891
[Sample 3]
4
可以向如下代码一样,用数组储存:
1 #include<iostream> 2 using namespace std; 3 int a[100001]; 4 int main() 5 { 6 7 int x,ans=1,n,m,p=0; 8 char c; 9 cin>>a[1]; 10 while(scanf("%c",&c)!=EOF) 11 { 12 if(c==' ') break; 13 scanf("%d",&x); 14 x=x%10000; 15 if(c=='+') a[++ans]=x; 16 else 17 { 18 n=a[ans]; 19 a[ans]=(n*x)%10000; 20 } 21 } 22 for(int i=1;i<=ans;i++) p=p+a[i]; 23 p=p%10000; 24 printf("%d ",p); 25 }
还有一种方法:
定义两个stack,一个储存符号,另一个储存操作数,要计算什么根据算数优先级弹出再入栈。