1. Introduction
This post delves into a fascinating number theory problem in C programming known as the "Happy Number" problem. The concept of a happy number is intriguing: starting with any positive integer, by repeatedly replacing the number with the sum of the squares of its digits, the process will eventually reach the number 1 if the number is happy. This problem is an excellent way to practice control flow, loops, and mathematical operations in C.
Problem
Given a positive integer n, the task is to determine whether it is a happy number. A number is considered happy if this process of replacing it with the sum of the squares of its digits eventually leads to 1. Otherwise, the process will end up in a loop that does not include 1, and the number is not happy.
2. Solution Steps
1. Use a loop to repeatedly calculate the sum of the squares of the digits of n.
2. Check if the resulting number becomes 1.
3. Use a mechanism to detect loops indicating that the number is not happy.
4. Return true if n becomes 1, and false if a loop is detected.
3. Code Program
#include <stdio.h>
// Helper function to calculate the sum of the squares of the digits
int sumOfSquares(int num) {
int sum = 0;
while (num > 0) {
int digit = num % 10;
sum += digit * digit;
num /= 10;
}
return sum;
}
// Function to determine if a number is happy
int isHappy(int n) {
int slow = n, fast = n;
do {
slow = sumOfSquares(slow); // Move one step
fast = sumOfSquares(sumOfSquares(fast)); // Move two steps
} while (slow != fast);
return slow == 1;
}
// Main function to test the isHappy function
int main() {
int num1 = 19;
printf("Is 19 a Happy Number: %s\n", isHappy(num1) ? "true" : "false");
int num2 = 2;
printf("Is 2 a Happy Number: %s\n", isHappy(num2) ? "true" : "false");
return 0;
}
Output:
Is 19 a Happy Number: true Is 2 a Happy Number: false
Explanation:
1. The sumOfSquares function calculates the sum of squares of digits of a number.
2. In isHappy, use the "slow and fast pointer" technique to detect loops.
3. The loop continues until the slow and fast pointers meet.
4. If slow pointer becomes 1, then n is a happy number.
5. If a loop is detected, n is not a happy number.
6. The main function tests isHappy with two examples and prints the results.
Comments
Post a Comment