C Exercises: Explain whether a number is Keith or not
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:
Flowchart:
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.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics