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

递归例题 整数的四则运算

作者: 见习炼丹师 | 来源:发表于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)








相关文章

  • 递归例题 整数的四则运算

  • 不用加减乘除做加法

    题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。 思路 递归采用 按位与 ...

  • 递归例题:放苹果

    这里利用分类分别递归的思想,通过分析题目可知,不能通过先走一步,减少问题规模,而是直接分成几个大类,同时,注意规划...

  • 递归例题:算24

    这道题相对复杂,是属于可以先走一步不断递归降低问题规模的类型,总体思想是不断地将两个数字通过枚举所有的四种运算方法...

  • 1.1 整数运算

    1. 四则运算 Java的整数运算遵循四则运算规则,可以使用任意嵌套的小括号。四则运算规则和初等数学一致。例如: ...

  • 数学运算

    Python 提供的基本数据类型 int、float 可以做整数和浮点的四则运算以及乘方等运算。 但是,四则运算不...

  • 41-python中数学运算

    Python 提供的基本数据类型int、float可以做整数和浮点的四则运算以及乘方等运算。 但是,四则运算不局限...

  • 递归例题 N皇后 反思

  • LeetCode 回溯专题 4:组合问题 Combination

    再次体会分析递归结构的重要意义,画出树形图是关键。并且初步感知递归分支可以修建的情况。 例题:LeetCode 第...

  • 程序员的数学I

    递归——自己定义自己2 思考:和的定义 假设n为0以上的整数,使用递归的方式从0到n的整数之和。n=0时, S(n...

网友评论

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

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