我目前在教導自己Ada,儘管我可以從解決一些比較傳統的問題開始。Ada中的任意長度整數
更具體地說,我嘗試計算階乘n !,而n> 100。我的實現至今是:
with Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Text_IO;
procedure Factorial is
-- define a type covering the range beginning at 1 up to which faculty is to
-- be computed.
subtype Argument is Long_Long_Integer range 1..100;
-- define a type that is large enough to hold the result
subtype Result is Long_Long_Integer range 1..Long_Long_Integer'Last;
package Result_IO is new Ada.Text_IO.Integer_IO(Result); use Result_IO;
-- variable holding the faculty calculated.
fac : Result := 1;
begin
-- loop over whole range of ARGUMENT and calculate n!
for n in ARGUMENT loop
fac := (fac * n);
end loop;
end;
的問題是很明顯,即使是Long_Long_Integer可以爲此太小,並引發對n> 20 CONTRAINT_ERROR例外。
是否有包實現任意大小的整數?
謝謝! PS:我選擇了反對遞歸,因爲我想在本練習中探索循環。但否則請評論代碼的所有方面(風格,最佳做法,錯誤..)
非常感謝!這是比我希望得到的更多的答案..我會檢查出來。 – Arne 2009-08-22 21:59:36
好的答案,基督徒。我繼續並驗證了您的額外網頁,並將它們轉換爲適合您的鏈接。希望從我的upvote中得到額外的10分會幫助你更快地從不受信任的noob地區驅逐出去。 – 2009-08-24 17:39:03