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

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

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

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值