功能pow對於功率取參數double
,對於第n個根將是1.0/n
。
該程序然後使用包含結果的值的整數算術來查看它們是否正確啓動。沒有必要進行徹底的循環。
程序運行參數是number
和n-th root
。
#include <stdio.h>
#include <math.h>
unsigned powN (unsigned num, unsigned power)
{
unsigned prod = 1;
while (power) {
if (power & 1)
prod *= num;
num *= num;
power >>= 1;
}
return prod;
}
int main(int argc, char *argv[])
{
unsigned number, root, answer, test;
if(argc < 3) {
return 0;
}
if(sscanf(argv[1], "%u", &number) != 1) {
return 0;
}
if(sscanf(argv[2], "%u", &root) != 1) {
return 0;
}
answer = (unsigned)pow(number, 1.0/root);
// check this value
test = powN(answer, root);
if(test == number) {
printf("%u**%u = %u\n", answer, root, number);
return 0;
}
// check the value above
test = powN(answer+1, root);
if(test == number) {
printf("%u**%u = %u\n", answer+1, root, number);
return 0;
}
// check the value below
if (answer > 1) {
test = powN(answer-1, root);
if(test == number) {
printf("The %u**%u = %u\n", answer-1, root, number);
return 0;
}
}
printf("No exact %u-th root of %u\n", root, number);
return 0;
}
樣品試驗:
test 49 2
7**2 = 49
test 50 4
No exact 4-th root of 50
test 64 3
4**3 = 64
test 16807 5
7**5 = 16807
A [MCVE],請。 – StoryTeller
需要更多代碼。考慮在這裏發佈最小但完整的代碼。 –