12.JS函数案例(水仙花数,数字加密,最小公倍数,最大公约数)

223 阅读3分钟

1.水仙花数

  • 封装一个函数, 判断一个数字是否为 水仙花数
    什么是水仙花数, 一个四位数字, 各个位置的四次方和!!! 四次方和!!! 四次方和 如果等于自身, 那么就是水仙花数
//1.封装一个函数
    function fn(num){
      //2.计算参数 num 接收到的四位数字,是否为水仙花数
      /**
       * 2.1拿到四位数字的各个位置上的数字
       *     以1234为例子
       *         想拿到千位数字的1   先让他缩小1000倍,然后通过parseInt取整
       *              parseInt(1234/1000) -> parseInt(1.234) -> 1
       *         想拿到百位数字的2   先让他缩小100倍,然后通过parseInt取整,再加一个取余10
       *              parseInt(1234 / 100) % 10  ->  parseInt(12.34) % 10  ->  12%10 -> 2
       *         想拿到十位数字的3   先缩小10倍,然后取余10
       *              parseInt(1234 / 10) % 10  ->parseInt(123.4) % 10  -> 123 % 10  -> 3
       *         想拿到个位数字4     直接用原数字取余10  
       *              num % 10
      */
      var qianW = parseInt(num / 1000)
      var baiW = parseInt(num / 100) % 10
      var shiW = parseInt(num / 10) % 10
      var geW = num % 10
      //2.2计算各个位置上的数字 的 四次方和
      var sum = qianW ** 4 + baiW ** 4 + shiW ** 4 + geW ** 4 // ** 是ES6以后新推出的一个语法  4代表了计算这个数字的4次方   这个数字是几就是几次方
      //2.3判断四次方和  是否等于 自身
      if(sum === num){
        // console.log('是水仙花数')
        return true
      }else{
        // console.log('不是水仙花数')
        return false
      }
      //最后一步:如果这个数字是水仙花数,返回一个true  否则返回false
    }
    var str = fn(1634)
    console.log(str)//true

2.数字加密

封装一个函数, 对一个四位数字加密,加密规则:
   1. 每一位上的数字 +5    然后使用 10的余数替代
   2. 一三交换位置, 二四交换位置

   举例:
         输入 1234
         1. 每一位上的数字 +5 ===> 6789
         2. 使用 10 的余数代替 ===> 6789
         3. 一三  二四  交换位置 ===> 8967
         输入 5655
         1. 每一位上的数字 +5 ===> 0100
         2. 使用 10 的余数代替 ===> 0100
         3. 一三  二四  交换位置 ===> 0001   (这里需要打印0001, 不能打印1)
    function fn(num) {
      if(num >=1000 && num <10000){
        //对一个四位数字进行加密操作
      //1.先拿到四位数字的各个位置上的值
      var qianW = parseInt(num / 1000)
      var baiW = parseInt(num / 100) % 10
      var shiW = parseInt(num / 10) % 10
      var geW = num % 10
      //2.将这四个值,加5后,替换原本的值
      qianW += 5
      baiW += 5
      shiW += 5
      geW += 5
      //3.将加5后的值使用余数去替代
      qianW %= 10
      baiW %= 10
      shiW %= 10
      geW %= 10
      /**
       * 4.一三交换位置, 二四交换位置
       *     原始数字:   qianW  baiW  shiW  geW
       *     4.1  一三交换位置:  shiW  baiW  qianW  geW
       *     4.2  二四交换位置:  shiW  geW  qianW  baiW
      */

      var numT = '' + shiW + geW + qianW + baiW   

      //最后一步,将加密后的数字,返回出去
      return numT
      }else{
        console.log('传入的数字不是四位数')
      }
    }
    var sum = fn(5655)
    console.log('加密后的数字为:', sum)

3.最大公约数

封装一个函数, 求两个数字的最大公约数

    function fn1(a,b){
      //1.寻找两个参数中较小的值
      var min = a > b ? b : a //如果a>b条件成立,说明b的值小,所以返回b,否则,说明a的值小,那么返回a

      //2.找约数
      for(var i = min; i >= 1 ; i--){
        /**
         * 假设min的值为8
         *    那么i的值可能是 8 7 6 5 4 3 2 1
        */
       if(a % i === 0 && b % i === 0)
        //返回ab的最大公约数
       return i
       /**
        * 当第一次这个if 执行的时候,说明此时的变量i是参数a和b的公约数,并且是最大公约数
        *     此时直接return i,  return具有中断函数的能力(虽然现在写在循环中,那么他会中断循环,然后中断函数)
       */
      }
    }
    var sum = fn1(10,20)
    console.log(sum)

4.最小公倍数

//提前准备一个函数求最大公约数
    function fn1(a,b){
      var min = a > b ? b : a 
      for(var i = min; i >= 1 ; i--){
       if(a % i === 0 && b % i === 0)
       return i
      }
    }
    
    function fn2(a,b){
    /**
     * 需要计算a 和b 的最小公倍数
     *   一个数学公式:
     *       两数的乘积 === 两数的最大公约数 * 两数的最小公倍数
     *       a * b === a和b的最大公约数 * a和b的最小公倍数
     *       根据数学等式,做一个变换
     *           a*b / a和b的最大公约数 === a和b的最小公倍数
    */

    //根据 数学等式完成代码
    // var num1 = fn1(a,b)//这里的ab其实就是fn2函数的两个形参,得到的值就是ab的最大公约数
    // var num2 = a * b / num1//计算最小公倍数

    // return num2//将最小公倍数返回

    return a * b / fn1(a,b)
   }
   var sum = fn2(8,12)
   console.log(sum)//这里会输出 数字8和数字12的最小公倍数 24