將一個正整數拆分成若干個互不相同的正整數且乘積最大(JS)

來源:互聯網
上載者:User

在紅殿群裡有人問到這個問題。想了想,這與其說是個編程題,不如說是個數學問題,演算法只要想到了並不難。

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>拆分整數</title>
</head>

<body>
請輸入要拆分的正整數:<input type="text" name="number" />
<input type="button" value="計算" onclick="splitnum();" />
<script language="javascript">
function splitnum()
...{
    var N=document.all.number.value;    //定義正整數
    var flag=true;        //標誌是否還能減下去,true 表真
    var result=new Array();    //定義數組用來儲存拆成的正整數
    var key=2;    //定義減數
    var Last=N;        //定義餘數
    var i=-1;    //定義數組標號
    if(N<=2)
    ...{
        document.write("沒有挑戰性");
    }
    else
    ...{
        while(flag)
        ...{
            Last=Last-key;    //餘數減去減數
            if(Last>=0)        //如果餘數大於等於0
            ...{
                i++;    //標號自加一                        
                result[i]=key;        //儲存減數
            }
            else    //如果小於0,不能儲存該減數。將餘數拆成一個個1,從數組尾部開始加到數組的每一個元素,加完為止
            ...{
                flag=false;        //終止迴圈
                Last=Last+key;        //恢複餘數的值
                while(Last>0)
                ...{
                    result[i]++;    //從尾部開始每個元素加1
                    if(i==0)
                        i=result.length-1;        //特殊的,如果餘數大於數組的長度,則返回再加一遍
                    else
                        i--;    //下標自減1
                    Last--;        //餘數自減1
                }
            }
            key++;    //減數自加一
        }
        document.write("將"+N+"拆成:");        //document.write是往螢幕輸出
        var chengji=1;
        for(i=0;i<result.length;i++)    //數組名.length是取得數組包含的元素個數
        ...{
            chengji=chengji*result[i];
            document.write(result[i]);
            if(i!=result.length-1)
                document.write("+");
        }
        document.write("乘積是:"+chengji);        
    }
}
</script>
</body>
</html>

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.