Check Narcissistic Number in C++
Check Narcissistic Number in C++ (4 Programs).
1#include <iostream>2#include <cmath>3using namespace std;45bool isNarcissistic(int num) {6 int original = num;7 int n = 0, sum = 0;89 // Count digits10 int temp = num;11 while (temp != 0) {12 temp /= 10;13 n++;14 }1516 // Calculate sum of digits raised to power n17 temp = num;18 while (temp != 0) {19 int digit = temp % 10;20 sum += pow(digit, n);21 temp /= 10;22 }2324 return sum == original;25}2627int main() {28 int num;29 cout << "Enter a number: ";30 cin >> num;3132 if (isNarcissistic(num)) {33 cout << num << " is a Narcissistic number" << endl;34 } else {35 cout << num << " is not a Narcissistic number" << endl;36 }3738 return 0;39}
Output
Enter a number: 153 153 is a Narcissistic number
What's going on
The program checks whether a given number is a Narcissistic number. For example:
A Narcissistic number must satisfy: sum of (each digit^number_of_digits) = number
Example:
Header Files Used
Understanding Narcissistic Numbers
Definition
:
A Narcissistic number (Armstrong number) is a number that equals the sum of its digits, each raised to the power of the number of digits.
Mathematical Expression
:
If n has d digits and digits are d₁, d₂, ..., dₐ, then:
n = d₁^d + d₂^d + ... + dₐ^d
Examples
:
Known Narcissistic Numbers
:
Function: isNarcissistic()
bool isNarcissistic(int num) {
int original = num;
int n = 0, sum = 0;
int temp = num;
while (temp != 0) {
temp /= 10;
n++;
}
// Calculate sum of digits raised to power n
temp = num;
while (temp != 0) {
int digit = temp % 10;
sum += pow(digit, n);
temp /= 10;
}
return sum == original;
}
This function:
1// Count digits
Step-by-Step Algorithm
Let's trace through the algorithm for num = 153:
Step 1: Count Digits
Iteration 1:
Iteration 2:
Iteration 3:
Result: n = 3 (153 has 3 digits)
Step 2: Calculate Sum of Digit Powers
Iteration 1:
Iteration 2:
Iteration 3:
Step 3: Compare
Result: 153 is a Narcissistic number.
Understanding the Algorithm Components
Counting Digits
:
Extracting Digits
:
Raising to Power
:
Accumulation
:
Main Function
int num;
cout << "Enter a number: ";
cin >> num;
if (isNarcissistic(num)) {
cout << num << " is a Narcissistic number" << endl;
} else {
cout << num << " is not a Narcissistic number" << endl;
}
return 0;
}
1int main() {
Process Flow
:
Other Methods (Mentioned but not shown in code)
Method 2: Using String Conversion
string numStr = to_string(num);
int n = numStr.length();
int sum = 0;
for (char c : numStr) {
int digit = c - '0';
sum += pow(digit, n);
}
1return sum == num;
Method 3: Using Recursion
int countDigits(int num) {
if (num == 0) return 0;
}
int sumDigitPowers(int num, int power) {
if (num == 0) return 0;
return pow(num % 10, power) + sumDigitPowers(num / 10, power);
}
bool isNarcissistic(int num) {
int n = countDigits(num);
return sumDigitPowers(num, n) == num;
}
1return 1 + countDigits(num / 10);
Method 4: Using Array
int digits[10], count = 0;
int temp = num;
while (temp != 0) {
digits[count++] = temp % 10;
temp /= 10;
}
int sum = 0;
for (int i = 0; i < count; i++) {
sum += pow(digits[i], count);
}
1return sum == num;
Displaying the Result
The program prints:
Output (for input 153):
153 is a Narcissistic number
Or if not a Narcissistic number:
123 is not a Narcissistic number
1cout << num << " is a Narcissistic number" << endl;
Why Are They Called "Narcissistic"?
Origin of Name
:
Mathematical Beauty
:
Common Narcissistic Numbers
1-digit (all are Narcissistic)
:
3-digit
:
4-digit
:
Common Use Cases
Number Theory
:
Algorithm Practice
:
Interview Questions
:
Important Considerations
Edge Cases
:
Large Numbers
:
Efficiency
:
return 0;
This ends the program successfully.