# 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.