2011年12月10日 星期六

電腦課VB期末考題解析(?)

呃...相信大家都知道老師上課要大家設一個程式
讓使用者輸入N值後計算,N!以及1!+...+N!的答案

從上面這邊我們知道 至少要用到三個變數

分別儲存N值、N!的答案、1!+...+N!答案

這邊範例把這三個變數分別叫做n ans1 ans2

可以把步驟拆成:輸入N→計算→輸出答案

計算部分又可以拆成N!以及1!+...+N!

而這兩個答案之間又有因果關係

就是把前面的結果再加上目前所計算出的階乘

例如N=3

就先算1!=1 計算總和=>1

再算2!=2 計算總和=>1+2=3

最後算3!=6 計算總和=>1+2+6=9

所以只要把N!的寫法解出問題就迎刃而解了


首先是要求使用者輸入N

程式可以寫成

n = inputbox("請輸入n")

不過因為n待會必須用來計算,所以只能是數值

所以我們加上val函數,避免使用者輸入其他資料造成計算上錯誤

n = val(inputbox("請輸入n"))

數學上我們知道N!=1*2*3*....*N

看到N個東西連乘就要想到用迴圈去達成

這時就可以寫成
ans1 = 1
For i = 1 To n
ans1 = ans1*i
Next i
第一行我們先讓ans1初始值為1
然後再根據每跑一次迴圈i就增加1的方式去達成1*2*3*...*N

接著我們再把1!+...+N!的計算補上
根據上面的解說,作法就是在乘上下個數字之前
先把本次計算出的數值加到總和中

所以程式可以改成
ans1 = 1
For i = 1 To n
ans1 = ans1*i
ans2 = ans2+ans1
Next i

最後就是輸出的部分啦
Print n ; "! = " ; ans1
Print "1!+...+" ; n ; "! = " ; ans2