用PASCAL算N 急

2025-01-06 06:20:21 字數 1369 閱讀 4425

1樓:嘯嘯_飛

a:=a+1這句去了,不但沒有意義,而且還是個語法錯誤。

改掉之後就行了,階乘數能夠表示出來的也就前十幾個,往後用高精度吧。

pascal高精度演算法求n!(帶講解,初學者。滿意追加)

2樓:趙儀邛宇

階乘的計算。

問題描述。輸入乙個整數n(1<=n<=1000),輸入n!的精確值。

分析:當n比較大時,n!是乙個很大的數,pascal的實數和整數型別均不能儲存,所有考慮用高精度計算。

這個問題的情況比較特殊,我們可以把n!看成(n-1)!*n,這樣參與乘法的兩個數乙個是高精度數(n-1)!,另乙個是常規的整數n.

下面我們看,如何得到n!的精確值,如:12!=12*11!=12*39916800,以些為例說明計算過程:

陣列a(2)在進行計算時將a中的各個元素分別同乘數(這裡是12)相乘,結果存放在當前位,上面的a陣列同12相乘,得到的中間結果為:下標k

陣列a(3)每次乘積運算之後將處理進位,如上例中a[3]將向a[4]進位9,進位後a[3]=6,a[4]=81,同時a[4]在向a[5]進位8,進位後a[4]=1,a[5]=20,a[5]向a[6]進位2,進位後a[5]=0,a[6]=110,a[6]向a[7]進位11,進位後a[6]=0,a[7]=119,a[7]向a[8]進位11,進位後,a[7]=9,a[8]=47,a[8]向a[9]進位4,進位後[8]=7,a[9]=4,a[9]不必向a[10]進位了,到些進位處理完成。通過進位處理後,a陣列中儲存的資料如下:下標k

陣列a此時a陣列中儲存的數就是12!=479001600,這與我們手工計算的結果是一樣的。

varn,i,j,k,x,q:word;

a:array[1..3000]

ofword;

beginwrite('n=')readln(n);

fori:=1to

doa[i]:=0;

k:=1;a[1]:=1;

fori:=2ton

dobegin

forj:=1tok

doa[j]:=a[j]*i;

q:=0;for

j:=1tokdo

beginx:=a[j]+q;

a[j]:=xmod

q:=xdiv

end;while

q>0)

dobegin

k:=k+1;

a[k]:=qmod

q:=qdiv

end;end;

fori:=k

downto

dowrite(a[i]);

writeln;

writeln('k=',k);

end.

有關用pascal程式設計的兩道題急

最簡單的寫法,效率比較低 1var i,j,n,m,count integer flag boolean begin readln n,m count 0 if n 2 then n 2 for i n do m do begin flag true j 2 while flag and j j i...

中興N986電信版怎麼用聯通卡上網,急

你需要先確認下,你用的電信手機支不支援聯通網路,如不支援是無法使用的。另外如是電信合約機是會被鎖網就只能用電信卡。中興n986電信版怎麼用聯通卡上網,急 中興n986電信版國內是鎖定其他運營商網路,則遮蔽了訊號網路導致無法支援聯通號碼使用的。你需要先確認下,你用的電信手機支不支援聯通網路,如不支援是...

用PASCAL語言實現程式要求從1到33裡列出不重複的數加起來的和為100的陣列

vara array 1.6 of integer g,j integer begin g 0 for a 1 1 to 33 do for a 2 2 to 33 do if a 1 a 2 then for a 3 3 to 33 do if a 1 a 3 and a 2 a 3 then f...