第一次作业:四则运算

第一次作业:四则运算

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:

posted @ 2017-09-22 14:36  hoho_yb  阅读(222)  评论(3编辑  收藏  举报