在C语言中判断一个数是否为完全平方数,可以通过以下代码实现:
#include <stdio.h>
int isPerfectSquare(int num) {
int i = 1;
while (num > 0) {
num -= i;
i += 2;
}
return num == 0;
}
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (isPerfectSquare(num)) {
printf("%d是一个完全平方数\n", num);
} else {
printf("%d不是一个完全平方数\n", num);
}
return 0;
}
这段代码使用了一个循环来判断一个数是否为完全平方数,如果是完全平方数,那么经过循环后num会变成0;否则num会小于0。这种方法比较直接,但不是最优化的方法。
另一种优化的方法是使用二分查找的方式来判断一个数是否为完全平方数,代码如下:
#include <stdio.h>
int isPerfectSquare(int num) {
if (num < 0) {
return 0;
}
int left = 0, right = num;
while (left <= right) {
long long mid = left + (right - left) / 2;
long long square = mid * mid;
if (square == num) {
return 1;
} else if (square < num) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return 0;
}
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (isPerfectSquare(num)) {
printf("%d是一个完全平方数\n", num);
} else {
printf("%d不是一个完全平方数\n", num);
}
return 0;
}
这段代码使用了二分查找的方式来判断一个数是否为完全平方数,时间复杂度为O(logn),比上一种方法更加高效。