美文网首页
递归例题 整数的四则运算

递归例题 整数的四则运算

作者: 见习炼丹师 | 来源:发表于2017-11-01 22:01 被阅读0次
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    using namespace std;
    
    int expression_value();//计算表达式的值,表现为:值+值
    int term_value();//计算项的值,表现为:值*值
    int factor_value();//计算因子的值,其中因子可能是括号中的表达式,也可能是数字
    
    int main()
    {
        cout<<expression_value()<<endl;
        return 0;
    }
    
    //计算表达式的值
    int expression_value(){
        //将表达式的值先赋成项第一个项的值,项的值已被取走
        int result=term_value();
        //再看看有没有其他的项
        char c=cin.peek();//只看一个字符,不取走,在这里表示观察下一个字符以判断表达式有没有结束
        while(c=='+'||c=='-'){
            cin.get();//作用是取走一个字符(在这里是加减符号)
            //项之间的运算
            if(c=='+'){
                result+=term_value();
            }
            else
                result-=term_value();
            //再次看一个字符,回到循环判断
            c=cin.peek();
        }
    
        return result;
    }
    
    //计算项的值,计算方法和表达式差不多,读取对象变成了因子
    int term_value(){
        int result=factor_value();
        char c=cin.peek();
        while(c=='*'||c=='/'){
            cin.get();
            if(c=='*'){
                result*=factor_value();
            }
            else
                result/=factor_value();
            c=cin.peek();
        }
        return result;
    }
    
    //计算因子的值
    int factor_value(){
        int result=0;
        char c=cin.peek();
        //看是不是括号括起来的表达式
        if(c=='('){
            cin.get();
            result+=expression_value();
            cin.get();//两个get负责吃掉括号
        }
        //是数字的情况,接下来需要考虑怎么把字符串转化为数字,需要用到一个判断是否是数字的函数
        else{
            //每当有一个新的数,把原来的那个数向高位移动一位
            while(isdigit(c)){
                result=result*10+c-'0';
                cin.get();//吃掉这一位
                c=cin.peek();//读取下一位
            }
        }
        return result;
    }
    这一题我第一反应是为什么没有输入语句。。。对cin输入流还不够清晰啊。
    这道题情况比较复杂,但分解后就会成为比较好理解的几个模块
    需要积累的是标准输入函数cin的用法:cin.peek(),cin.get()
    还有判断字符是否为数字的函数  bool isdigit(char)
    
    
    
    
    
    
    
    
    

    相关文章

      网友评论

          本文标题:递归例题 整数的四则运算

          本文链接:https://www.haomeiwen.com/subject/encnpxtx.html