In this tutorial, we will write a Keith number in C. It is one of the most asked questions in an interview. Before that, you may go through the following topic in C programming.
What is Keith Number?
A positive n digit number x is called a Keith number or repfigit number (repetitive Fibonacci-like digit) if it is arranged in a special number sequence generated using its digits. This sequence has n terms as digit of x and the next term is determined by the sum of previous n terms and so on. And if the number x falls under this sequence then x is a Keith Number. Example: 19, 742, etc
Explanation: Consider the number 742. Go through the following steps:
First separate the digit, 7, 4, 2.
To find the next term, add the digits, 7+4+2 = 13
New Series: 7, 4, 2, 13.
To find the next term, add the last three digits of the above sequence, 13+2+4=19
New Series: 7, 4, 2, 13, 19.
To find the next term, add the last three digits of the above sequence, 19+13+2=34
New Series: 7, 4, 2, 13, 19, 34.
To find the next term, add the last three digits of the above sequence, 34+19+13=66
New Series: 7, 4, 2, 13, 19, 34, 66.
To find the next term, add the last three digits of the above sequence, 66+34+19=119
New Series: 7, 4, 2, 13, 19, 34, 66, 119.
To find the next term, add the last three digits of the above sequence, 119+66+34=219
New Series: 7, 4, 2, 13, 19, 34, 66, 119, 219.
To find the next term, add the last three digits of the above sequence, 219+119+66=404
New Series: 7, 4, 2, 13, 19, 34, 66, 119, 219, 404.
To find the next term, add the last three digits of the above sequence, 404+219+119=742
New Series: 7, 4, 2, 13, 19, 34, 66, 119, 219, 404, 742.
Now we will stop as we got the number 742 as the term of the series. Hence 742 is a Keith Number.
C Program to check whether the Number is Keith Number or not
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | # include < stdio.h > #include <stdlib.h > //user defined funtion to count the length int digitCount(int n) { int counter = 0; while (n > 0) { n = n / 10; counter++; } return counter; } int main() { int num1 = 0, arr1[10], temp = 0, flag = 0, i = 0, sum = 0; printf("Enter a number: "); scanf("%d", &num1); temp = num1; for (i = digitCount(temp) - 1; i >= 0; i--) { arr1[i] = num1 % 10; num1 /= 10; } while (flag == 0) { for (i = 0; i < digitCount(temp); i++) sum += arr1[i]; if (sum == temp) { printf("The entered number is a Keith Number\n"); flag = 1; } if (sum > temp) { printf("The entered number is NOT a Keith number\n"); flag = 1; } for (i = 0; i < digitCount(temp); i++) { if (i != digitCount(temp) - 1) arr1[i] = arr1[i + 1]; else arr1[i] = sum; } sum = 0; } } |
Output:
//Run 1
Enter a number: 197
The entered number is a Keith Number
//Run 2
Enter a number: 15
The entered number is NOT a Keith number