zoukankan      html  css  js  c++  java
  • 第一次作业:四则运算

    第一次作业:四则运算

    https://coding.net/u/polk/p/arithmetic/git/tree/master/
    看好多同学都用的java写,无奈以前立下flag不想再碰java,就想着用js写吧,但又要控制台程序,好吧,上node不废话。

    别着急,先分析

    要计算四则运算式,你得先有四则运算式是吧。
    我的做法就是全程随机,全程随机有个好处,算式不易重复,效率高(好吧,其实是不会做查重···)。

    生成步骤:

    1. 控制台输入运算符数量的max,随机从四个运算符中取<=max运算符(这个很简单);
    2. 控制台输入操作数数量的max,随机生成(小于等于)<=max个操作数(这个很简单);
      想生成分数怎么办???(划重点!!):跟同学讨论的时候发现很多人没注意到问题的细节,

    使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围

    真分数和真分数的分母都得小于你输入的数,比如你输入了10,那么真分数和真分数的分母都得小于10,分数3/81小于10,但是约分后等于1/27,分母并不小于10,就不符合题意了,这个怎么办呢?
    我的解决办法是,随机生成分子分母两个数,但是分母一定得小于10(你输入的数),分子*10(你输入的数)/分母<10(你输入的数),中间用'/'拼接一下,作为字符串存进数组就好
    3. 然后就组合起来,随机取一个操作数push进数组,随机取一个运算符push进数组,直到操作数被取完了,一个表达式数组就完成了。
    什么,你想加括号???这还不简单,数组下表为偶数的(包括0)元素就是数字,奇数的元素为运算符,只要随机取一个小于数组长度的偶数,把这个数为下标的元素取出来(但不能为最后一个),在前面加一个'(',再存进去,然后随机取一个大于这个数并小于数组长度的偶数,把该元素取出来,在后面加一个')',再存进去,括号就加好了。(此方法只能加一个括号)

    生成完表达式,终于到计算了。
    怎么去计算一个四则运算表达式呢?
    我用的方法是后缀表达式,并且将所有的操作数都转化为分数来计算,不用担心分数在后缀表达式会乱掉,因为分数就是除法,除法跟乘法在四则运算中优先度最高(除了括号,所以我生成分数的时候都加了括号)。
    那么剩下的问题就是:怎么将所有的操作数都转化为分数来计算呢???
    为了方便和代码复用性,我这里用了面向对象的思想,创建一个分数的对象:
    function Fraction(first,second){
    this.first=parseInt(first); //分子
    this.second=parseInt(second); //分母
    this.reduction=function(){}; //约分
    this.addition=function(obj){}; //加
    this.subtraction=function(obj){}; //减
    this.multiplication=function(obj){}; //乘
    this.division=function(obj){}; //除
    }

    这样只要根据后缀表达式的计算方法,将分数的计算交给分数对象,最后只管输出就好

    剩下基本就没啥问题了。

    测试一下吧

    1.项目目录结构

    2.界面

    创建题目


    评审答案


    psp:

  • 相关阅读:
    userdel -删除使用者帐号及相关档案
    useradd -帐号建立或更新新使用者的资讯
    uptime
    uuid
    Web 在线文件管理器学习笔记与总结(7)重命名文件
    Java实现 LeetCode 116 填充每个节点的下一个右侧节点指针
    Java实现 LeetCode 116 填充每个节点的下一个右侧节点指针
    Java实现 LeetCode 114 二叉树展开为链表
    Java实现 LeetCode 114 二叉树展开为链表
    Java实现 LeetCode 114 二叉树展开为链表
  • 原文地址:https://www.cnblogs.com/polk-blogs/p/7574827.html
Copyright © 2011-2022 走看看