6

pow在 C 中使用该函数并将返回值存储为整数类型。请看下面的代码片段:

for (i = 0; i < 5; i++){
    val = (int)pow(5, i);
    printf("%d, ", val);
}

这里ival是整数,输出是1, 5, 24, 124, 624。我相信这是因为浮点数 25 被视为 24.99999... 在分配给整数时会向下舍入为 24。

如果我仍然需要将返回值存储在 int 中,我该如何绕过它?

4

4 回答 4

9

0.5在转换为之前添加int。如果您的系统支持它,您可以调用 C99round()函数,但出于便携性原因,我更愿意避免使用它。

于 2011-10-29T06:04:57.057 回答
6

代替

val = (int)pow(5, i);

double d = pow(5,i);
val = (int)((d > 0.0) ? floor(d + 0.5) : ceil(d - 0.5));
于 2011-10-29T07:10:44.023 回答
4

自己实施 pow。

int myPow(int base, int exponent) {
    int n = 1;
    for (int i = 0; i < exponent; i++) {
        n *= base;
    }
    return n;
}

当然,这仅处理正指数,并且仅适用于整数,并且肯定有更有效的方法可以做到这一点。例如,参见Haskell的源代码^

于 2011-10-29T06:13:46.243 回答
-3

我自己也有这个问题。我在您的说明中轻松解决了它,只需添加 if 语句即可。

if (k%n>0)
{
    k=k+1;
}
于 2013-11-23T20:40:16.257 回答