• 递归-中项表达式求解


    题外话:

    某天晚上梦见更了五六篇博客而不知疲惫.

    如果这是现实该多好啊哈哈哈!美梦成真吧!

    中项表达式就是最普通的表达式.也是几个小定义来回递归.这个题在去年期末上机题中出现过,但是比这个还有难一些.

    呜呜呜,去年的我啥都不会(当然现在也是),为难我干什么呀!!!!

    解:

     1 #include <iostream>
     2 using namespace std;
     3 /*
     4  * 感觉脑子有坑x10086
     5  * 
     6  * 
     7  * 
     8  * 首先前两个是需要循环的,因为有连加的情况,
     9  * 而最后一种不用,括号里面直接就是一个新的表达式
    10  * 
    11  * 其次注意返回值,,,
    12  * 
    13  * 因为可能没有+-*/所以result 上来就是??_value的值,就不要先搞个sum=0 return sum这个玩意了
    14  */
    15 int term_value();
    16 int factor_value();
    17 int expreesion_value(){
    18 
    19     int result = term_value();
    20     while(1){
    21         char op=cin.peek();//查看第一个字符但是不取走
    22         if(op=='+'||op=='-'){
    23             if(op=='+') {
    24                 cin.get();//取走一个字符
    25                 int value = term_value();
    26                 result = result + value;
    27             }
    28             else{
    29                 cin.get();//取走一个字符
    30                 int value = term_value();
    31                 result = result - value;
    32             }
    33 
    34         }
    35         else{
    36             break;
    37         }
    38     }
    39     return result;
    40 }
    41 int term_value(){
    42 
    43     int result = factor_value();
    44     while(1){
    45         char op=cin.peek();
    46         if(op=='*'||op=='/'){
    47             if(op=='*') {
    48                 cin.get();
    49                 int value = factor_value();
    50                 result = result *value;
    51             }
    52             else{
    53                 cin.get();
    54                 int value = factor_value();
    55                 result = result / value;
    56 
    57             }
    58         }
    59         else{
    60             break;
    61         }
    62     }
    63     return result;
    64 
    65 }
    66 int factor_value(){
    67     int result=0;
    68 
    69 
    70         char op = cin.peek();
    71         if (op == '(') {
    72             cin.get();
    73             result = expreesion_value();
    74             cin.get();
    75         } else {
    76             while (isdigit(op)) {
    77                 result = result * 10 + op - '0';//计算整数
    78                 cin.get();
    79                 op = cin.peek();
    80             }
    81         }
    82 
    83         return result;
    84     }
    85 
    86 
    87 
    88 
    89 
    90 
    91 int main(){
    92     cout<<expreesion_value();
    93 
    94 }
  • 相关阅读:
    hdu 4496 D-City 并查集
    hdu 4493 Tutor 水题
    codeforces 377A. Puzzles 水题
    hdu 1257 小希的迷宫 并查集
    图论500题
    cdoj 93 King's Sanctuary 傻逼几何题
    cdoj 题目简单分类
    cdoj 80 Cube 水题
    cdoj 71 I am Lord Voldemort 水题
    cdoj 65 CD Making 水题
  • 原文地址:https://www.cnblogs.com/zhmlzhml/p/13246865.html
Copyright © 2020-2023  润新知