我目前自学阿达虽然我可以解决一些比较常规的问题上手开始。
更具体地讲我尝试计算阶乘ñ!,而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:我确实对递归选择,因为我想探索这个练习循环。 但是,否则请在代码的各个方面提出意见(风格,最佳实践,错误..)