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

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