如何确定数字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);
提前致谢!
答案 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()