查找数字是否是另一个数的算法的算法

时间:2015-02-20 06:12:23

标签: c algorithm

如何确定数字b是否可以表示为另一个数字c的幂并找到相应的指数? 不使用math.h或递归。

数字类型为int

这是我写的代码:

#include <stdbool.h>


bool is_apowb(int a, int b, int *e) {

int x =0;
if (a>b)
{
    while (a%b==0 && b>0)
    {
        a=a/b;
        x++;
    }

    *e=x;
    return true;
}
else if (a==b)
{
    *e=1;
    return true;
}

else if (b<0)
{
   while (a%b==0)
    {
        a=a/b;
        x++;
    }
    *e=x;

    if (x%2==0)
    {
        return true;
    }
    else return false;
}

return false;

}

代码未通过以下测试:

assert(is_apowb(9,-3,&e));
assert(e == 2);
assert(!is_apowb(8,-2,&e));
assert(e == 2);

提前致谢!

2 个答案:

答案 0 :(得分:0)

如果您有一个数字n并想知道它是否是b的幂,您可以计算e = log(n)/ log(b)并查看它是否接近整数。如果是这样,将e舍入到该整数并计算b ^ e。如果这等于n那么你就完成了,而指数是e。如果不是,则n不是b的幂。

您也可以循环重复b,如下所示:

e = 0;
while (n%b == 0) {
  n = n/b;
  e++;
}
if (n == 1) return e; // n = b^e
return -1; // n is not a power of b

答案 1 :(得分:0)

#include <stdio.h>

int main(int argc, char* argv[] ) {

  int b = atoi(argv[1]);
  int c = atoi(argv[2]);
  int e;

  for (e = 0; b > 1; ++e) {
    if (b%c != 0) break;
    b /= c;
  }

  if (b == 1)
    printf("%d\n", e );
  else
    printf("nope\n");

    return 0;

} // end main()