Computer >> Máy Tính >  >> Lập trình >> Lập trình

Kiểm tra hình vuông hoàn hảo hay không


Một số được cho là số bình phương hoàn hảo nếu căn bậc hai của số đó là một số nguyên. Nói cách khác, khi căn bậc hai là một số nguyên thì số đó được gọi là số bình phương hoàn hảo.

Chúng ta có thể kiểm tra bình phương hoàn hảo bằng cách tìm căn bậc hai của số đó và so khớp với i nhiều lần để có được căn bậc hai chính xác. Khi căn bậc hai vượt qua giá trị, nó không phải là một số bình phương hoàn hảo.

Nhưng ở đây để giảm bớt công sức, chúng ta đã không kiểm tra lại căn bậc hai. Như chúng ta biết rằng căn bậc hai của một số bình phương hoàn hảo là một số nguyên, sau đó chúng ta có thể tăng căn bậc hai lên một và kiểm tra xem có khớp vuông hoàn hảo hay không.

Đầu vào và Đầu ra

Input:
A number to check: 1032
Output:
1032 is not a perfect square number.

Thuật toán

isPerfectSquare(num)

Đầu vào: Số lượng.

Đầu ra: Đúng nếu một số là số bình phương hoàn hảo và cũng in ra căn bậc hai.

Begin
   if num < 0, then
      exit
   sqRoot := 1
   sq := sqRoot^2
   while sq <= num, do
      if sq = num, then
         return sqRoot
      sqRoot := sqRoot + 1
      sq := sqRoot^2
   done
   otherwise return error
End

Ví dụ

#include<iostream>
using namespace std;

int isPerfectSquare(int num) {
   if(num < 0)
      return -1;            //a -ve number is not a valid square term
   int sqRoot = 1, sq;

   while((sq =(sqRoot*sqRoot)) <= num) {             //when square of square root is not crossed the number
      if(sq == num)
         return sqRoot;
      sqRoot++;               //as square root of a perfect square is always integer
   }
   return -1;
}

int main() {
   int num, res;
   cout << "Enter a number to check whether it is perfect square or not: ";
   cin >> num;

   if((res = isPerfectSquare(num)) != -1)
      cout << num << " is a perfect square number, square root: " << res;
   else
      cout << num << " is not a perfect square number.";
}

Đầu ra

Enter a number to check whether it is perfect square or not: 1032
1032 is not a perfect square number.