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