gpt4 book ai didi

c - Armstrong 数字程序在使用 Codeblocks 和 MinGW(32 位)编译时产生错误结果

转载 作者:可可西里 更新时间:2023-11-01 11:53:49 26 4
gpt4 key购买 nike

我想编写一个程序来判断一个数字是否是阿姆斯壮数字。我为此编写了一个函数,如果数字是 armstrong 数字则返回 1,否则返回 0。

我在函数中使用了以下代码:

int isArmsNum(int x)
{
int m, r = 0, d, y;

y = x;

while (x > 0)
{
m = x % 10;
r = r + pow(m, 3);
x = x / 10;
}

if (r == y)
{
d = 1;
}
if (r != y)
{
d = 0;
}

return d;
}

现在的问题是,当我尝试检查程序中的 153(这是一个 armstrong 数字)时,程序返回 0,并且仅当 x = 1 时才返回 1。我在 Visual Studio 2013 中编译了相同的代码,它是工作正常。

我决定对 Codeblocks(13.12) 进行一些调试,我发现,在 while 循环内,(检查 x = 153)

  • 第一次迭代后,m = 3, r = 27, x = 15//现在没问题
  • 第二次迭代后,m = 5, r = 151, x = 1//这就是问题所在。 r 应该是 152 因为 27+(5^3) = 152

因此,当循环终止时,r 的值应该是 153。

这可能是什么问题?有任何想法吗?

[带有 GCC 4.7.1-32 位 MinGW 的代码块 13.12]

[我的电脑运行的是 Windows 8.1 Pro 64 位]

[在其他 IDE 上测试了代码,有效。还通过终端和 Xcode 在 OS X 上使用 GCC 进行了尝试]

最佳答案

不要使用‘pow’。使用‛m*m*m‛。库函数适用于 double 并且是一个近似值,但它可能稍微不精确。由于 double 到 int 的转换会截断,因此即使是微小的错误也可能导致最终结果相差 1。

关于c - Armstrong 数字程序在使用 Codeblocks 和 MinGW(32 位)编译时产生错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22420270/

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