码迷,mamicode.com
首页 > 其他好文 > 详细

逆波兰表示法

时间:2017-11-02 00:57:26      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:print   col   描述   pre   参考   示例   return   输出   code   

        逆波兰表示发是一种将运算符写在操作数后面的描述程序(算式)的方法。举个例子,我们平常用中缀表示法描述的算式(1 + 2) * (5 + 4),改为逆波兰表示法之后则是1 2 + 5 4 + *。相较于中缀表示法,逆波兰表示法的优势在于不需要括号。

        请输出以逆波兰表示法输入的算式的计算结果。

输入   在1行中输入1个算式。相邻的符号(操作数或运算符)用1个空格隔开。

输出   在1行之中输出计算结果。

限制   2≤算式中操作数的总数≤100

          1≤算式中运算符的总数≤99

           运算符仅包括“+”  “-”  “*”,操作数为106以下的正整数。

           -1×109≤计算过程中的值≤109

 输入示例   

1 2 + 3 4 - *

输出示例

-3

参考代码:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 int top, S[1000];
 5 
 6 void push(int x) {
 7     S[++top] = x;
 8 }
 9 
10 int pop() {
11     top--;
12     return S[top + 1];
13 }
14 
15 int main() {
16     int a, b;
17     top = 0;
18     char s[100];
19     while (scanf("%s", s) != EOF) {
20         if (s[0] == +) {
21             a = pop();
22             b = pop();
23             push(a + b);
24         }
25         else if (s[0] == -) {
26             a = pop();
27             b = pop();
28             push(a - b);
29         }
30         else if(s[0] == *){
31             a = pop();
32             b = pop();
33             push(a * b);
34         }
35         else {
36             push(atoi(s));
37         }
38     }
39     printf("%d\n", pop());
40 
41     return 0;
42 }

 

 

 

  

逆波兰表示法

标签:print   col   描述   pre   参考   示例   return   输出   code   

原文地址:http://www.cnblogs.com/lulizhiTopCoder/p/7769110.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!