我对C很陌生,到目前为止我还不明白如何防止整数溢出,我读了很多文章,但我仍然不是100%确定! 在这种情况下
int ft_sqrt(int nb)
{
long int sqrt;
if (nb <= 0)
return (0);
if (nb == 1)
return (1);
sqrt = 1;
while (sqrt * sqrt < nb)
{
sqrt++;
}
if (sqrt * sqrt == nb)
return (sqrt);
else
return (0);
}
为了防止溢出,我应该使用
长
?这样做的最佳做法是什么?
因此,首先,您需要知道是否想要检测溢出或者是否可以避免它们。
为了避免它们,如果您知道
nb
可以有多长,也许您可以看看 long
或 long long
是否足够大。而且,如果不是,也许@Jonathan Leffler提出的使用while (sqrt < nb / sqrt)
的解决方案是使其适合其中一种类型的方法。
现在,如果您确实想要/需要检查溢出,那么您需要检查
square_root(MAX_NUMBER_ALLOWED) < sqrt
,其中 MAX_NUMBER_ALLOWED
取决于您使用的类型。 C/C++ 已经有相应的常量,您可以在here查看它们。