gpt4 book ai didi

计算幂 : how to test for values that exceed INT_MAX or INT_MIN?

转载 作者:太空宇宙 更新时间:2023-11-04 07:01:08 25 4
gpt4 key购买 nike

我正在尝试实现一个简单的程序来递归计算数字的幂。代码测试超过 INT_MAXINT_MIN 的值,并且应该分配 power = -1。然而,即使经过一定数量的递归调用,当结果变量超过最大值时,它也不会像我希望的那样打印错误消息。

#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <errno.h>

void power(int x, int n, int* result);

int main(int argc, char* argv[])
{
int x, n, result = 1;
x = 10;
n = 20;

if (n < INT_MIN || x < INT_MIN)
{
fprintf(stderr, "Argument(s) out of range\n");
return 0;
}

if (n > INT_MAX || x > INT_MAX)
{
fprintf(stderr, "Argument(s) out of range\n");
return 0;
}

if (x != 0)
{
power(x, n, &result);
if (result == -1)
{
fprintf(stderr, "Result is out of range\n");
return 0;
}
}

printf("%d to the power %d = %d\n", x, n, result);
return 0;
}



void power(int x, int n, int *result)
{
if (n == 0)
{
return;
}

if (*result > INT_MAX)
{
*result = -1;
return;
}

if (*result < INT_MAX)
{
*result = (*result) * x;
power(x, n - 1, result);
}
}

最佳答案

(您的倒数第二行代码:)当*result = (*result) * x;返回超过 INT_MAX,它失败了,也许 *result 将包含结果 % INT_MAX 的剩余部分,但可能有些疯狂 - 你永远没有机会在下一次迭代中测试它​​是否更大。

如果你想测试结果是否还好,你需要在实际计算之前检查乘积是否超出范围,例如使用:if (*result < INT_MAX/x) .如果那是真的,你可以再乘以一次。

关于计算幂 : how to test for values that exceed INT_MAX or INT_MIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38190219/

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