执行程序时出现一些错误

时间:2011-09-13 04:10:18

标签: c

我想编写一个程序来查看整数是否是另一个整数的幂(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出现之前输入一些随机特性。 谁能帮我?我知道这很容易。但我真的需要你的帮助

1 个答案:

答案 0 :(得分:4)

你不能在浮点上进行相等比较。

(double)a==(int)a

由于舍入错误,a可能不是一个整数,即使它应该是。

编辑:

有两种方法可以做到这一点:

  1. 允许比较宽容:fabs(a - (int)a) < 0.0001(或类似的东西,您需要调整阈值。)
  2. a舍入到最接近的整数并将其重新启动(仅使用整数)以查看它是否与输入匹配。