我想编写一个程序来查看整数是否是另一个整数的幂(true返回1,false返回0)。代码如下:
#include <stdio.h>
#include <math.h>
int cal_base_power(int);
int main()
{
int x,r;
printf("Please input an integer\n");
scanf("%d\n",&x);
r=cal_base_power(x);
printf("result is %d\n",r);
}
int cal_base_power(int input)
{
int i=2;
double a=pow(input,(double)1/i);
while (a>=2)
{
if ((double)a==(int)a)
return 1;
i++;
a=pow(input,(double)1/i);
}
return 0;
}
4,8,125这样的情况可以。但输入216和343时失败。它也不会自动输出0和1.我必须在结果0或1出现之前输入一些随机特性。 谁能帮我?我知道这很容易。但我真的需要你的帮助
答案 0 :(得分:4)
你不能在浮点上进行相等比较。
(double)a==(int)a
由于舍入错误,a
可能不是一个整数,即使它应该是。
编辑:
有两种方法可以做到这一点:
fabs(a - (int)a) < 0.0001
(或类似的东西,您需要调整阈值。)a
舍入到最接近的整数并将其重新启动(仅使用整数)以查看它是否与输入匹配。