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