gpt4 book ai didi

ada - 计算阶乘数

转载 作者:行者123 更新时间:2023-12-03 21:41:54 24 4
gpt4 key购买 nike

我正在自学 Ada 编程语言,在我使用的教科书中有一个
练习打印出用户输入的数字的阶乘值。我的程序编译并运行良好,我确实得到了预期的输出,但是如果我输入值 13,程序会崩溃并引发错误。
我不知道为什么数字 13 会这样做。 IDE 是否有错误(我使用 GNAT Studio)并且我目前使用的是 Ada 2012 标准。这是我的代码:

with Ada.Text_IO;
use Ada.Text_IO;
with Ada.Integer_Text_IO;
use Ada.Integer_Text_IO;

-- procedure main - begins the program
procedure main is
counter : Integer := 1;
number : Integer := 0;
factorial : Integer := 1;
begin
New_Line;

while counter <= 5 loop
Put("Enter an integer: ");
Get(number);

for Count in 1 .. number loop
factorial := factorial * Count;
end loop;

Put_Line("Factorial value is: " & integer'image(factorial));
factorial := 1;

counter := counter + 1;
end loop;

New_Line;
end main; -- end procedure main
错误消息是这样的:引发 CONSTRAINT_ERROR : main.adb:35 溢出检查失败
[2021-04-11 13:25:10] 进程以状态 1 退出,耗时:02.07s
这似乎是一个小问题,但我只是想知道是否有问题
使用创建它的代码,或者它只是我使用的软件的一般错误。
先感谢您。

最佳答案

12 的因数是 479,001,600。乘以 13 得到 13 的阶乘,该值为 6,227,020,800,大于 32 位二进制数。
所以 Constraint_Error 告诉你类型 Integer 不能代表 13 的阶乘——计算溢出。如果要计算更大的阶乘,则必须使用“更宽”的整数类型。请注意,Integer 的宽度是特定于编译器的,但保证至少为 16 位。其他一些编译器可能使用 64 位整数。 Ada 的一般建议是根据您的需要定义您自己的整数类型(类型 XX 是范围 0 .. 83838 或其他)。
否则,从 Ada 的角度来看,您的程序看起来还不错。

关于ada - 计算阶乘数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67044964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com