我在C中使用pow
函数并将返回值存储为整数类型。请参阅下面的代码段:
for (i = 0; i < 5; i++){
val = (int)pow(5, i);
printf("%d, ", val);
}
此处i
,val
为整数,输出为1, 5, 24, 124, 624
。
我相信这是因为浮点数25被视为24.99999 ...在分配给整数时会向下舍入为24。
如果我仍然需要将返回值存储在int?
中,我怎么能通过这个呢?答案 0 :(得分:9)
在投射到0.5
之前添加int
。如果您的系统支持它,您可以调用C99 round()
函数,但出于可移植性原因,我更愿意避免使用它。
答案 1 :(得分:5)
替换
val = (int)pow(5, i);
与
double d = pow(5,i);
val = (int)((d > 0.0) ? floor(d + 0.5) : ceil(d - 0.5));
答案 2 :(得分:3)
自己动手制作。
int myPow(int base, int exponent) {
int n = 1;
for (int i = 0; i < exponent; i++) {
n *= base;
}
return n;
}
当然,这仅处理正指数,并且仅适用于整数,并且肯定有更有效的方法。例如,请参阅the source for ^
in Haskell。
答案 3 :(得分:-3)
我有自己的这个问题。我在你的指令中轻松解决了它只需添加if语句。
if (k%n>0)
{
k=k+1;
}