在C語(yǔ)言中判斷一個(gè)數(shù)是否為完全平方數(shù),可以通過(guò)以下代碼實(shí)現(xiàn):
#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("請(qǐng)輸入一個(gè)整數(shù):");
scanf("%d", &num);
if (isPerfectSquare(num)) {
printf("%d是一個(gè)完全平方數(shù)\n", num);
} else {
printf("%d不是一個(gè)完全平方數(shù)\n", num);
}
return 0;
}
這段代碼使用了一個(gè)循環(huán)來(lái)判斷一個(gè)數(shù)是否為完全平方數(shù),如果是完全平方數(shù),那么經(jīng)過(guò)循環(huán)后num會(huì)變成0;否則num會(huì)小于0。這種方法比較直接,但不是最優(yōu)化的方法。
另一種優(yōu)化的方法是使用二分查找的方式來(lái)判斷一個(gè)數(shù)是否為完全平方數(shù),代碼如下:
#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("請(qǐng)輸入一個(gè)整數(shù):");
scanf("%d", &num);
if (isPerfectSquare(num)) {
printf("%d是一個(gè)完全平方數(shù)\n", num);
} else {
printf("%d不是一個(gè)完全平方數(shù)\n", num);
}
return 0;
}
這段代碼使用了二分查找的方式來(lái)判斷一個(gè)數(shù)是否為完全平方數(shù),時(shí)間復(fù)雜度為O(logn),比上一種方法更加高效。