A non-negative integer is a perfect square when it equals some integer k multiplied by itself: n = k × k.
Remember
n is a perfect square ⇔ ∃ integer k ≥ 0 such that k² = n
Examples:
0 = 0²
1 = 1²
9 = 3²
16 = 4²
10 → no integer square root
n
√n idea
Perfect square?
16
4 × 4
Yes
25
5 × 5
Yes
10
between 3² and 4²
No
0
0 × 0
Yes
Approach
How to Check a Perfect Square in C
Four clear steps — then pick an integer loop or a sqrt-and-verify check.
Reject negatives (this tutorial treats only n >= 0).
Try candidate roots i = 0, 1, 2, … while i * i <= n.
If some i * i == n, return true; if you pass n, return false.
Or compute root = (int)sqrt(n) and verify root * root == n.
Method
Idea
Time
Best for
Integer loop
Compare i * i with n
O(√n)
Interviews without floating point
Sqrt + verify
Square the truncated root back
O(1)
Short production-style checks
Pseudocode
Pseudocode
function IsPerfectSquare(n):
if n < 0: return false
i = 0
while i * i <= n:
if i * i == n:
return true
i = i + 1
return false
Reference
Cheat Sheet
Keep these facts handy while writing the program.
Topic
Detail
Definition
n = k² for some integer k ≥ 0
Zero
0 is a perfect square
Negatives
Not perfect squares here
Loop stop
While i * i <= n
Sqrt verify
root * root == n after truncate
Classic checks
16 yes; 10 no; 25 yes
Try it
Live Preview
Enter an integer to see the nearest integer root and the perfect-square check.
Whole numbers only. Negatives are not perfect squares here. Tap a chip or type a value.
Result
n = 16
root = 4
4 × 4 = 16
16 is a perfect square
Trace
Worked Walkthrough — n = 16
Try successive integer squares until you match or pass 16.
Calculation
i = 0 → 0² = 0
i = 1 → 1² = 1
i = 2 → 2² = 4
i = 3 → 3² = 9
i = 4 → 4² = 16 ← equal to n
16 is a perfect square
Sqrt path:
sqrt(16) = 4.0
root = 4
4 * 4 == 16 → same answer
Code
C Programs
Start with the integer loop so you never rely on floating point. Use sqrt-and-verify when you want a short, clear check.
Example 1 — Integer Loop
Increase i while i * i <= n and look for an exact match.
C
#include <stdio.h>
int is_perfect_square(int n)
{
int i;
if (n < 0)
return 0;
for (i = 0; (long)i * i <= n; i++)
{
if (i * i == n)
return 1;
}
return 0;
}
int main(void)
{
int number = 16;
if (is_perfect_square(number))
printf("%d is a perfect square\n", number);
else
printf("%d is not a perfect square\n", number);
return 0;
}
Output
16 is a perfect square
How It Works
Negatives return 0 (false) immediately.
The loop condition i * i <= n stops once squares go past n.
Each step checks whether i * i equals n.
For 16, i = 4 matches and the function returns 1.
If no match appears before the loop ends, the answer is 0.
Example 2 — Sqrt + Verify
Take the square root, truncate to an integer, then square it back.