C++ Program to Check Perfect Number

This page is created to provide you some programs in C++ that is used to check whether a number entered by user is a perfect number or not. But before going through all these programs that are:

  • Check perfect number using for loop
  • using while loop
  • using user-defined function

let's first understand, what are perfect numbers.

Which Number can be called as a Perfect Number ?

If a number is equal to the sum of its positive divisors (excluding the number itself), then that number can be called as a perfect number. For example, 28 is a perfect number, because the divisors of 28 in this case are 1, 2, 4, 7, 14. And the sum of all these numbers gives the number itself. That is:

28 = 1+2+4+7+14
   = 14+14
   = 28

Therefore 28 is a perfect number. Some other perfect numbers are 6, 496, 8128 etc. Now let's move on to the program given below.

Check Perfect Number using for Loop

The question is, write a program in C++ that checks whether a number is a perfect number or not. The number must be entered by user at run-time of the program. The answer to this question is:

#include<iostream>

using namespace std;
int main()
{
   int num, i, sum=0;
   cout<<"Enter a Number: ";
   cin>>num;
   for(i=1; i<num; i++)
   {
      if(num%i==0)
         sum = sum+i;
   }
   if(num==sum)
      cout<<endl<<num<<" is a Perfect Number.";
   else
      cout<<endl<<num<<" is not a Perfect Number.";
   cout<<endl;
   return 0;
}

Here is its initial output:

c++ program check perfect number

Now enter a number as input say 496 and press ENTER key to check whether it is a perfect number or not like shown in the snapshot given below:

check perfect number or not c++ program

The dry run of above program with user input 6 goes like:

  • When user enters a number, it gets stored in num variable. Therefore num=6
  • Now the execution of for loop begins, starts with i's value as 1
  • With i=1, the condition i<num or 1<6 evaluates to be True, therefore program flow goes inside the loop
  • The condition (of if) num%i==0 or 6%1==0 or 0==0 evaluates to be True, therefore program flow goes inside the if block or in the body of if
  • And sum+i or 0+1 or 1 gets initialized to sum. Therefore sum=1
  • Now the value of i gets incremented using i++ statement. Therefore i=2 now
  • Again the condition i<num or 2<6 evaluates to be True, therefore program flow again goes inside the loop
  • And inside the loop, again the condition (of if), num%i==0 or 6%2==0 or 0==0 evaluates to be True
  • Therefore sum+i or 1+2 or 3 gets initialized to sum. Now sum=3
  • Now the value of i again gets incremented using i++. Now i=3
  • And with new value of i, the condition i<num again gets evaluated
  • This process continues, until the condition of the loop evaluates to be False
  • In this way, after exiting from the loop, the sum variable holds the sum of all the divisors of the number.
  • Therefore, I've compared sum with number itself. If it is equal, then it is a perfect number. Otherwise not

Check Perfect Number using while Loop

To change the above program and create a new program using while loop, following the steps given below:

  • initialize i with 1 at the time of its declaration
  • put the condition i<num as it is inside the while loop
  • increment the value of i in the body of the loop like shown in the program given below

Here is the program that uses while loop instead of for to do the same job as of previous program.

#include<iostream>

using namespace std;
int main()
{
   int num, i=1, sum=0;
   cout<<"Enter a Number: ";
   cin>>num;
   while(i<num)
   {
      if(num%i==0)
         sum = sum+i;
      i++;
   }
   if(num==sum)
      cout<<endl<<num<<" is a Perfect Number.";
   else
      cout<<endl<<num<<" is not a Perfect Number.";
   cout<<endl;
   return 0;
}

This program produces same output as of previous program.

Check Perfect Number using Function

This is the last program of this article, created using a user-defined function named check_per(). This function returns 1 if the number is a perfect number, otherwise returns 0.

#include<iostream>

using namespace std;

int check_per(int);
int main()
{
   int num, res;
   cout<<"Enter a Number: ";
   cin>>num;
   res = check_per(num);
   if(res==1)
      cout<<endl<<num<<" is a Perfect Number.";
   else
      cout<<endl<<num<<" is not a Perfect Number.";
   cout<<endl;
   return 0;
}
int check_per(int n)
{
   int i, s=0;
   for(i=1; i<n; i++)
   {
      if(n%i==0)
        s = s+i;
   }
   if(n==s)
        return 1;
   else
        return 0;
}

This program again does the same job as of previous program, and produces same output.

C++ Online Test


« Previous Program Next Program »