Loops Practice 4
Hello 🙌 Today we will practice some more questions on loops. This will be our last exercise. After this, we are ready to solve most of the standard problems on loops and also approach new problems. As we have already done many problems in previous articles, so, I will highly recommend solving these questions without looking at the solution. At least, give them a fair try. ✌️ 😄
Now, Let's start with the questions with our weapon. (A pen and paper)
Problem 1: Check Perfect Number
Write a C++ program to input a number and check whether the number is a Perfect number or not.
Input
Input any number: 6
Output
6 is PERFECT NUMBER
Approach
If we know what is perfect number, Can we give it a try? Always spend some time with the question to improve problem-solving skills. 😄
What is a Perfect Number?
A perfect number is a positive integer that is equal to the sum of its proper positive divisors. A positive proper divisor is a positive divisor of a number, excluding itself.
For example: 6 is the first perfect number
Proper divisors of 6 are 1, 2, 3
Sum of its proper divisors = 1 + 2 + 3 = 6.
Hence 6 is a perfect number.
Give it a shot !! ✌️
Intuition
Do you remember the concept of calculating the factors of a number? (We have covered this in the previous article namely Loops 2) We can use the same to get the positive proper divisors of the number and then, calculate their sum. If the sum equals the number, it is perfect else not.
Hint: Can a number have any proper positive divisor ( positive divisor of a number, excluding itself) greater than num/2? No.
Now, Give it a try !!
Explanation/Steps
- Input a number from the user. Store it in some variable say num.
- Initialize another variable to store the sum of proper positive divisors, say sum = 0.
- Run a loop from 1 to num/2, increment 1 in each iteration. The loop structure should look like for(i=1; i<=num/2; i++).Why iterating from 1 to num/2, why not till num? Because a number does not have any proper positive divisor greater than num/2.
- Inside the loop if the current number i.e. i is a proper positive divisor of num, then add it to the sum.
- Finally, check if the sum of proper positive divisors equals to the original number. Then, the given number is a Perfect number otherwise not.
Solution Code for All Languages
C++
#include <iostream>
using namespace std;
int main()
{
int i, num, sum = 0;
/* Input a number from user */
cout << "Enter any number to check perfect number: ";
cin >> num;
/* Calculate sum of all proper divisors */
for(i = 1; i <= num / 2; i++)
{
/* If i is a divisor of num */
if(num % i == 0)
{
sum += i;
}
}
/* Check whether the sum of proper divisors is equal to num */
if(sum == num && num > 0)
{
cout << "It is a PERFECT NUMBER";
}
else
{
cout << "It is NOT a PERFECT NUMBER";
}
return 0;
}
Java
import java.util.Scanner;
public class PerfectNumber {
public static void main(String[] args) {
int i, num, sum = 0;
// Input a number from the user
Scanner scanner = new Scanner(System.in);
// System.out.print("Enter any number to check perfect number: ");
num = scanner.nextInt();
// Calculate sum of all proper divisors
for (i = 1; i <= num / 2; i++) {
// If i is a divisor of num
if (num % i == 0) {
sum += i;
}
}
// Check whether the sum of proper divisors is equal to num
if (sum == num && num > 0) {
System.out.println("It is a PERFECT NUMBER");
} else {
System.out.println("It is NOT a PERFECT NUMBER");
}
// Close scanner resource
scanner.close();
}
}
Problem 2: Print Perfect Numbers
Write a C++ program to find all Perfect numbers between 1 to n where n is the input given by the user.
Input
Enter the number n: 100
Output
Perfect numbers between 1 to 100: 6, 28
Approach
If you have gone through the previous question i.e. problem 1, this question would be easy to solve as we already know the concept. Give it an honest try without looking at the solution. ✌️😄
Intuition
We have to print perfect numbers between 1 and n. So, we can simply run a loop from 1 to n and print those numbers which are perfect. We already have seen how to check whether a number is perfect or not in Problem 1. Sounds easy Right?
Give it a try, please !! 🙌
Explanation/Steps
- Input n from the user to find Perfect numbers. Store it in a variable say n.
- Run a loop from 1 to n, increment 1 in each iteration. The loop structure should look like
for(i = 1; i <= n; i++)
. - For each iteration inside loop print the value of i if it is a Perfect number.
Solution Code for All Languages
C++
#include <iostream>
using namespace std;
int main()
{
int i, j, n, sum;
/* Input a number from user to print perfect number */
cout << "Enter any number to print perfect number from 1 to n: ";
cin >> n;
cout << "All Perfect numbers between 1 to n are :\n" << endl;
/* Iterate from 1 to n */
for(i = 1; i <= n; i++)
{
sum = 0;
/* Check whether the current number i is Perfect number or not */
for(j = 1; j < i; j++)
{
if(i % j == 0)
{
sum += j;
}
}
/* If the current number i is Perfect number */
if(sum == i)
{
cout << i << " ";
}
}
return 0;
}
Java
import java.util.Scanner;
public class PerfectNumbers {
public static void main(String[] args) {
int i, j, n, sum;
// Input a number from the user to print perfect numbers
Scanner scanner = new Scanner(System.in);
// System.out.print("Enter any number to print perfect numbers from 1 to n: ");
n = scanner.nextInt();
System.out.println("All Perfect numbers between 1 to " + n + " are:");
// Iterate from 1 to n
for (i = 1; i <= n; i++) {
sum = 0;
// Check whether the current number i is a perfect number or not
for (j = 1; j < i; j++) {
if (i % j == 0) {
sum += j;
}
}
// If the current number i is a perfect number
if (sum == i) {
System.out.print(i + " ");
}
}
// Close scanner resource
scanner.close();
}
}
Problem 3: Check Strong Numbers
Write a C++ program to input a number from the user and check whether the given number is a strong number or not.
Input
Enter the number: 145
Output
145 is STRONG NUMBER
Approach
To solve this question, we will first see what is a strong number. When we see this term for the first time we don't know what it means. At least I did not know.
What is a Strong Number?
A strong number is a special number whose sum of factorial of digits is equal to the original number.
For example: 145 is a strong number. Since, 1! + 4! + 5! = 145
Intuition
After solving many questions, now we know how to get hold of each digit of a number and also, how to calculate the factorial of the number. We can use the concept to check whether a number is strong or not.
I am thinking that I would take each digit of the number calculate its factorial and store it in a variable sum. As I do this for each digit of the number, I will keep on updating the sum. At last, I will check if the number is equal to the sum. If they are equal, we can say it is a strong number. Are we thinking the same??
Give it a try !! We can do this ✌️
Explanation/Steps
- Input a number from the user to check for a strong number. Store this in a variable say num. Copy it to a temporary variable for calculation purposes, say
originalNum = num
. - Initialize another variable to store the sum of the factorial of digits, say
sum = 0
. - Find the last digit of the given number num. Store the result in a variable say
lastDigit = num % 10
. - Find the factorial of lastDigit. Store factorial in a variable say fact.
- Add factorial to sum i.e.
sum = sum + fact
. - Remove the last digit from the num as it is not needed further.
- Repeat steps 3 to 6 till
num > 0
. - After loop check condition for strong number. If
sum == originalNum
, then the given number is a Strong number otherwise not.
Solution Code for All Languages
C++
#include <iostream>
using namespace std;
int main()
{
int i, originalNum, num, lastDigit, sum;
int fact;
/* Input a number from user */
cout << "Enter any number to check Strong number: ";
cin >> num;
/* Copy the value of num to a temporary variable */
originalNum = num;
sum = 0;
/* Find sum of factorial of digits */
while(num > 0)
{
/* Get last digit of num */
lastDigit = num % 10;
/* Find factorial of last digit */
fact = 1;
for(i = 1; i <= lastDigit; i++)
{
fact = fact * i;
}
/* Add factorial to sum */
sum = sum + fact;
num = num / 10;
}
/* Check Strong number condition */
if(sum == originalNum)
{
cout << "It is a STRONG NUMBER";
}
else
{
cout << "It is NOT a STRONG NUMBER";
}
return 0;
}
Java
import java.util.Scanner;
public class StrongNumber {
public static void main(String[] args) {
int i, originalNum, num, lastDigit, sum;
int fact;
// Input a number from the user
Scanner scanner = new Scanner(System.in);
// System.out.print("Enter any number to check Strong number: ");
num = scanner.nextInt();
// Copy the value of num to a temporary variable
originalNum = num;
sum = 0;
// Find sum of factorial of digits
while (num > 0) {
// Get last digit of num
lastDigit = num % 10;
// Find factorial of last digit
fact = 1;
for (i = 1; i <= lastDigit; i++) {
fact = fact * i;
}
// Add factorial to sum
sum = sum + fact;
num = num / 10;
}
// Check Strong number condition
if (sum == originalNum) {
System.out.println("It is a STRONG NUMBER");
} else {
System.out.println("It is NOT a STRONG NUMBER");
}
// Close scanner resource
scanner.close();
}
}
Problem 4: Print Strong Numbers
Write a C++ program to print all strong numbers between 1 to n where n is the input given by the user.
Input
Enter the number n: 1000
Output
Strong numbers between 1-1000:
1, 2, 145
Approach
If you have gone through the previous question i.e. problem 3, this question would be fairly easy to solve as we already know the concept and solved many problems on similar lines. Give it an honest try without looking at the solution. ✌️😄
Intuition
We have to print strong numbers between 1 and n. So, we can simply run a loop from 1 to n and print those numbers which are strong. We have already seen how to check whether a number is strong or not in Problem 3. Sounds easy Right?
Give it a try, please !! 🙌
Explanation/Steps
- Input n to print a strong number from the user. Store it in a variable say end.
- Run a loop from 1 to end, increment 1 in each iteration. The structure of the loop should be similar to
for(i=1; i<=end; i++)
. - For each iteration inside loop check i for strong number. Print the value of i if it is a strong number.
Solution Code for All Languages
C++
#include <iostream>
using namespace std;
int main()
{
int i, j, cur, lastDigit, end;
int fact, sum;
/* Input a number from user */
cout << "Enter any number to print Strong number from 1 to that number: ";
cin >> end;
cout << "All Strong numbers between 1 to n are:\n";
/* Iterate from 1 to end */
for(i = 1; i <= end; i++)
{
/* Number to check for strong number */
cur = i;
sum = 0;
/* Find the sum of the factorial of digits */
while(cur > 0)
{
fact = 1;
lastDigit = cur % 10;
/* Find factorial of last digit of current num. */
for( j = 1; j <= lastDigit; j++)
{
fact = fact * j;
}
sum += fact;
cur /= 10;
}
/* Print 'i' if it is strong number */
if(sum == i)
{
cout << i << " ";
}
}
return 0;
}
Java
import java.util.Scanner;
public class StrongNumbers {
public static void main(String[] args) {
int i, j, cur, lastDigit, end;
int fact, sum;
// Input a number from the user to print Strong numbers
Scanner scanner = new Scanner(System.in);
// System.out.print("Enter any number to print Strong numbers from 1 to that number: ");
end = scanner.nextInt();
System.out.println("All Strong numbers between 1 to " + end + " are:");
// Iterate from 1 to end
for (i = 1; i <= end; i++) {
// Number to check for strong number
cur = i;
sum = 0;
// Find the sum of the factorial of digits
while (cur > 0) {
fact = 1;
lastDigit = cur % 10;
// Find factorial of last digit of current number
for (j = 1; j <= lastDigit; j++) {
fact = fact * j;
}
sum += fact;
cur /= 10;
}
// Print 'i' if it is a Strong number
if (sum == i) {
System.out.print(i + " ");
}
}
// Close scanner resource
scanner.close();
}
}
This was our last exercise for practicing loops. Did you enjoy doing it?? I hope it is a yes 😀 I am confident that now you are comfortable with the loop problems.
"Remember Practice leads to Perfection".
Happy Learning !! 😀 See you in the next article with more interesting concepts.