C Perfect Square Program

Beginner
5 min read
Updated: Oct 2026
2 programs
Live preview

What Is a Perfect Square?

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 ideaPerfect square?
164 × 4Yes
255 × 5Yes
10between 3² and 4²No
00 × 0Yes

How to Check a Perfect Square in C

Four clear steps — then pick an integer loop or a sqrt-and-verify check.

  1. Reject negatives (this tutorial treats only n >= 0).
  2. Try candidate roots i = 0, 1, 2, … while i * i <= n.
  3. If some i * i == n, return true; if you pass n, return false.
  4. Or compute root = (int)sqrt(n) and verify root * root == n.
MethodIdeaTimeBest for
Integer loopCompare i * i with nO(√n)Interviews without floating point
Sqrt + verifySquare the truncated root backO(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

Cheat Sheet

Keep these facts handy while writing the program.

TopicDetail
Definitionn = k² for some integer k ≥ 0
Zero0 is a perfect square
NegativesNot perfect squares here
Loop stopWhile i * i <= n
Sqrt verifyroot * root == n after truncate
Classic checks16 yes; 10 no; 25 yes

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

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

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;
}

How It Works

  1. Negatives return 0 (false) immediately.
  2. The loop condition i * i <= n stops once squares go past n.
  3. Each step checks whether i * i equals n.
  4. For 16, i = 4 matches and the function returns 1.
  5. 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.

C
#include <stdio.h>
#include <math.h>

int is_perfect_square(int n)
{
    int root;

    if (n < 0)
        return 0;

    root = (int)sqrt((double)n);
    return root * root == n;
}

int main(void)
{
    printf("%d\n", is_perfect_square(16)); /* 1 */
    printf("%d\n", is_perfect_square(10)); /* 0 */
    printf("%d\n", is_perfect_square(0));  /* 1 */
    printf("%d\n", is_perfect_square(-4)); /* 0 */
    return 0;
}

How It Works

  1. Same non-negative rule as Example 1.
  2. sqrt(n) returns a double approximation of √n.
  3. Casting to int keeps the integer part of that root.
  4. Squaring root again and comparing with n confirms an exact square.
  5. For 10, root becomes 3 and 9 != 10, so the result is 0.

Edge Cases & Pitfalls

Check these before calling the solution done.

0

Zero counts

0 = 0². Do not special-case it as false.

Negatives

Not squares here

Return 0 for n < 0 in this beginner definition.

Overflow

i * i care

For large n, cast to long for i * i so the product does not overflow int.

Sqrt

Always verify

Never decide from the double alone — square the truncated root back.

Time and Space Complexity

ProgramTimeExtra space
Integer loopO(√n)O(1)
Sqrt + verifyO(1)O(1)

Both are fine for interviews. Prefer the loop when you must avoid floating-point discussion.

Key Takeaways

  • Definition: n = k² for some integer k ≥ 0.
  • Loop: test i * i while i * i <= n.
  • Sqrt: truncate, then verify root * root == n.
  • Test set: 0 → yes; 16 → yes; 10 → no; -4 → no.

One line: find an integer root whose square equals n — by looping or by verifying sqrt.

Frequently Asked Questions

A non-negative integer that equals some integer multiplied by itself. Examples: 0, 1, 4, 9, 16, 25.
Loop with i*i until you match or pass n, or take sqrt(n), cast to int, and verify root*root == n.
Yes. 0 = 0 × 0.
sqrt returns a double. Floating-point rounding can misclassify edge values, so always square the integer root back and compare.
A loop up to √n is O(√n). The sqrt-and-verify method is O(1) for practical interview sizes (constant-time math call plus a few ops).

Next: Power of 2

Check whether a number is a power of two.

Power of 2 tutorial →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

6 people found this page helpful