In this **java programming tutorial**, you will learn about Keith Number and its implementation in java. It is frequently asked in Java coding.

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

### What are the Steps to Find Keith Number with programming

- Read a number (x).
- Separate each digit from the number (x).
- Add all the separated n-digits and that will give the next term of the series.
- Again, add the last n-terms of the series to find the next term.
- Repeat step 4 until the term which the same as the number(x).

**Java 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 | import java.util.Scanner; public class KeithNumber { public static void main(String[] args) { int i, sum = 0, n, num; Scanner sc = new Scanner(System.in); System.out.print("Enter a number: "); num = sc.nextInt(); n = num; //string to get the length String s = Integer.toString(num); int d = s.length(); int arr[] = new int[num]; //separating the digit and storing it in array for (i = d - 1; i >= 0; i--) { arr[i] = n % 10; n = n / 10; } i = d; /*once the sum value becomes equal or greater than that of the entered number, it stops */ while (sum < num) { sum = 0; for (int j = 1; j <= d; j++) { sum = sum + arr[i - j]; } arr[i] = sum; i++; } //compares the sum with the entered number if (sum == num) System.out.println(num + " is a Keith Number."); else System.out.println(num + " is not a Keith Number."); } } |

**Output:**

`Enter a number: 742 `

742 is a Keith Number.

//Another output

Enter a number: 456

456 is not a Keith Number.

Another way to do it, by creating a function that will pass Boolean value to the main function.

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 60 | import java.util.*; public class KeithNumber { //function that checks if the given number is Keith or not static boolean isKeithNum(int num) { //array list to store the separated digit ArrayList<Integer> terms = new ArrayList<Integer> (); int temp = num, n = 0; //n = no. of digits //condition to separate the digit while (temp > 0) { terms.add(temp % 10); temp = temp / 10; n++; } //reverse the List Collections.reverse(terms); int next = 0, i = n; //calculation of next terms while (next < num) { next = 0; //condition for adding the terms to get new term for (int j = 1; j <= n; j++) next = next + terms.get(i - j); terms.add(next); i++; } /*now the next is either equal or greater than entered number if equal then it is true else false*/ return (next == num); } //main public static void main(String[] args) { int number; Scanner sc = new Scanner(System.in); System.out.print("Enter a number: "); number = sc.nextInt(); //passing the number as an argument to the function if (isKeithNum(number)) System.out.println(number + " is a Keith number."); else System.out.println(number + " is not a Keith number."); } } |

**Output:**

`Enter a number: 19 `

19 is a Keith number.