Happy Number - C Solution

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