zoukankan      html  css  js  c++  java
  • 一个js函数算出任意位数的水仙花数

    一个算出任意位数的水仙花数的函数如下:

    var arr =[];
    /*更改num确定取值范围*/
    for(var num = 100; num <= 9999;num++){
    /*多位数版本*/ 
    var i = 0;
    /*设置一个数用来存储变量num*/
    var suan = num;
     
    do{
    /*取出个位*/
    arr[i] = suan%10;
    /*去掉“个位”*/
    suan = Math.floor(suan/ 10) ;
    i++; 
    }while(suan >= 1 )
     
    var sum = 0;
    for(var i=0;i<arr.length;i++)
    {
    /*累加各个数字的n次幂(n为数字的位数,如100为3,1000为4)*/
    sum+= Math.pow(arr[i],arr.length);
    }
    if(sum == num){
    console.log(num);
    }
    }
     

    不过百度上说。。

    水仙花数只是自幂数的一种,严格来说3位数的3次幂数才称为水仙花数。
    附:其他位数的自幂数名字
    一位自幂数:独身数
    两位自幂数:没有
    三位自幂数:水仙花数
    四位自幂数:四叶玫瑰数
    五位自幂数:五角星数
    六位自幂数:六合数
    七位自幂数:北斗七星数
    八位自幂数:八仙数
    九位自幂数:九九重阳数
    十位自幂数:十全十美数

    不过不管了,要的就是一式多用的功能就行了。

    推导过程如下:

    通常我们求三位数的水仙花是这么算的

     
    for(var i = 100; i < 1000; i++){
      //百位
      var a = Math.floor(i / 100);
      // 十位
      var b = Math.floor((i - a * 100)/10);
      // 个位
      var c = i % 10;
      if(Math.pow(a,3) + Math.pow(b,3) + Math.pow(c,3) === i){
        console.log(i+'是一个水仙花数');
      }
    }
    

     这样的做法似乎没有什么规律,那就先求个位,再求十位,百位

    于是就改成了这样(把循环和累加省掉了)

          
    //个位
    ge = num%10;
    // 十位
    shi = Math.floor(num / 10)  %10;
    // 百位
    bai = Math.floor(num / 100);
    

      也就等价于

    //个位
    ge = num%10;
    // 十位
    shi = Math.floor(num / 10)  %10;
    // 百位,百位/100后余10即等于本身,因为除了100且化为整数之后只剩个位数,个位对10取余依旧是自己
    bai = Math.floor(num / 10/10) % 10;
    

    也就是一直在对10取余之后除以10再对10取余,

    而取余出来时的数为我们所要的个、十、百。。等位数

    除以十则是一直在循环除以同一个数

    那自然取余的数用数组存取,

    而这个用来除以10的数则是循环累除,直至小于1

    于是得到

    var arr =[];
    /*更改num确定取值范围*/
    for(var num = 100; num <= 9999;num++){
    /*多位数版本*/ 
    var i = 0;
    /*设置一个数用来存储变量num*/
    var suan = num;
    
    do{
    /*取出个位*/
    arr[i] = suan%10;
    /*去掉“个位”*/
    suan = Math.floor(suan/ 10) ;
    i++; 
    }while(suan >= 1 )
    
    var sum = 0;
    for(var i=0;i<arr.length;i++)
    {
    /*累加各个数字的n次幂(n为数字的位数,如100为3,1000为4)*/
    sum+= Math.pow(arr[i],arr.length);
    }
    if(sum == num){
    console.log(num);
    }
    }
    

      

  • 相关阅读:
    清源CPM代码复现
    图像分类模型
    分享-微软亚洲研究院:NLP将迎来黄金十年
    表格生成本文-代码实践-data2text-plan-py
    了解一下BigBird
    《BERT模型精讲》徐路
    精读论文的步骤
    使用预训练编码器生成文本摘要
    Heap/Perm space
    静态代码块,代码块
  • 原文地址:https://www.cnblogs.com/axu1997/p/11804833.html
Copyright © 2011-2022 走看看