w3resource

C Exercises: Explain whether a number is Keith or not

C Numbers: Exercise-37 with Solution

Write a program in C to check if a number is Keith or not (with explanation).

Test Data
Input a number : 1537

Sample Solution:

C Code:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <math.h>

// Function to count the number of digits in a number
int lenCount(int nm) {
    int ctr = 0;
    while (nm > 0) {
        nm = nm / 10;
        ctr++;
    }
    return ctr;
}

// Main function
int main() {
    // Declare variables
    int num1 = 0, arr1[10], num2 = 0, flg = 0, i = 0, sum = 0, kk;

    // Display information about Keith numbers
    printf("\n\n Check whether a number is Keith or not: \n");
    printf(" Sample Keith numbers: 197, 742, 1104, 1537, 2208, 2580, 3684, 4788, 7385..\n");
    printf(" -----------------------------------------------------------------------\n");
    printf(" Input a number : ");

    // Read input number
    scanf("%d", &num1);
    num2 = num1;

    // Store individual digits of the input number in an array
    for (i = lenCount(num2) - 1; i >= 0; i--) {
        arr1[i] = num1 % 10;
        num1 /= 10;
    }

    // Loop to check if the number is a Keith number or not
    while (flg == 0) {
        // Calculate the sum of the array elements
        for (i = 0; i < lenCount(num2); i++)
            sum += arr1[i];

        // Check conditions for Keith number
        if (sum == num2) {
            flg = 1;
            kk = 1; // Set flag for Keith number
        }
        if (sum > num2) {
            flg = 1;
            kk = 0; // Set flag for non-Keith number
        }

        // Display the current sequence of digits being checked
        for (i = 0; i < lenCount(num2); i++) {
            printf(" %d", arr1[i]);
            if (i != lenCount(num2) - 1) {
                arr1[i] = arr1[i + 1];
                printf(" + ");
            } else {
                arr1[i] = sum;
                printf(" = %d", arr1[i]);
            }
        }
        printf("\n");
        sum = 0;
    }

    // Display the result whether the number is a Keith number or not
    if (kk == 1) {
        printf(" The given number is a Keith Number.\n");
    }
    if (kk == 0) {
        printf(" The given number is not a Keith Number.\n");
    }

    // Return 0 to indicate successful execution of the program
    return 0;
}

Sample Output:

 Input a number : 1537                                                                                        
 1 +  5 +  3 +  7 = 16                                                                                        
 5 +  3 +  7 +  16 = 31                                                                                       
 3 +  7 +  16 +  31 = 57                                                                                      
 7 +  16 +  31 +  57 = 111                                                                                    
 16 +  31 +  57 +  111 = 215                                                                                  
 31 +  57 +  111 +  215 = 414                                                                                 
 57 +  111 +  215 +  414 = 797                                                                                
 111 +  215 +  414 +  797 = 1537                                                                              
 The given number is a Keith Number.

Visual Presentation:

C programming: Explain whether a number is Keith or not.

Flowchart:

Flowchart: Explain whether a number is Keith or not

C Programming Code Editor:

Contribute your code and comments through Disqus.

Previous: Write a program in C to check if a number is Keith or not.
Next: Write a C programming to check whether a given number with base b (2 <= b<= 10) is a Niven number or not.

What is the difficulty level of this exercise?

Test your Programming skills with w3resource's quiz.



Follow us on Facebook and Twitter for latest update.