将一个正整数拆分成若干个互不相同的正整数且乘积最大(JS)

来源:互联网 发布:dnf制卡辅助与端口辅助 编辑:程序博客网 时间:2024/05/29 15:56


在红殿群里有人问到这个问题。想了想,这与其说是个编程题,不如说是个数学问题,算法只要想到了并不难。

<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>
0 0