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.