File tree Expand file tree Collapse file tree 3 files changed +91
-0
lines changed Expand file tree Collapse file tree 3 files changed +91
-0
lines changed Original file line number Diff line number Diff line change
1
+ using Algorithms . Numeric ;
2
+ using NUnit . Framework ;
3
+ using System ;
4
+
5
+ namespace Algorithms . Tests . Numeric
6
+ {
7
+ public static class KeithNumberTest
8
+ {
9
+ [ Test ]
10
+ [ TestCase ( 14 ) ]
11
+ [ TestCase ( 47 ) ]
12
+ [ TestCase ( 197 ) ]
13
+ [ TestCase ( 7909 ) ]
14
+ public static void KeithNumberWork ( int number )
15
+ {
16
+ // Act
17
+ var result = KeithNumberChecker . IsKeithNumber ( number ) ;
18
+
19
+ // Assert
20
+ Assert . IsTrue ( result ) ;
21
+ }
22
+
23
+ [ Test ]
24
+ [ TestCase ( - 2 ) ]
25
+ public static void KeithNumberShouldThrowEx ( int number )
26
+ {
27
+ // Arrange
28
+
29
+ // Assert
30
+ Assert . Throws < ArgumentException > ( ( ) => KeithNumberChecker . IsKeithNumber ( number ) ) ;
31
+ }
32
+ }
33
+ }
Original file line number Diff line number Diff line change
1
+ using System ;
2
+
3
+ namespace Algorithms . Numeric
4
+ {
5
+ /// <summary>
6
+ /// In number theory, a Keith number or repfigit number is a natural number n in a given number base b with k digits such that
7
+ /// when a sequence is created such that the first k terms are the k digits of n and each subsequent term is the sum of the
8
+ /// previous k terms, n is part of the sequence.
9
+ /// </summary>
10
+ public static class KeithNumberChecker
11
+ {
12
+ /// <summary>
13
+ /// Checks if a number is a Keith number or not.
14
+ /// </summary>
15
+ /// <param name="number">Number to check.</param>
16
+ /// <returns>True if it is a Keith number; False otherwise.</returns>
17
+ public static bool IsKeithNumber ( int number )
18
+ {
19
+ if ( number < 0 )
20
+ {
21
+ throw new ArgumentException ( $ "{ nameof ( number ) } cannot be negative") ;
22
+ }
23
+
24
+ var tempNumber = number ;
25
+
26
+ var stringNumber = number . ToString ( ) ;
27
+
28
+ var digitsInNumber = stringNumber . Length ;
29
+
30
+ /* storing the terms of the series */
31
+ var termsArray = new int [ number ] ;
32
+
33
+ for ( var i = digitsInNumber - 1 ; i >= 0 ; i -- )
34
+ {
35
+ termsArray [ i ] = tempNumber % 10 ;
36
+ tempNumber /= 10 ;
37
+ }
38
+
39
+ var sum = 0 ;
40
+ var k = digitsInNumber ;
41
+ while ( sum < number )
42
+ {
43
+ sum = 0 ;
44
+
45
+ for ( var j = 1 ; j <= digitsInNumber ; j ++ )
46
+ {
47
+ sum += termsArray [ k - j ] ;
48
+ }
49
+
50
+ termsArray [ k ] = sum ;
51
+ k ++ ;
52
+ }
53
+
54
+ return sum == number ;
55
+ }
56
+ }
57
+ }
Original file line number Diff line number Diff line change @@ -42,6 +42,7 @@ This repository contains algorithms and data structures implemented in C# for ed
42
42
* [ Series] ( ./Algorithms/Numeric/Series )
43
43
* [ Maclaurin Series] ( ./Algorithms/Numeric/Series/Maclaurin.cs )
44
44
* [ Gauss-Jordan Elimination] ( ./Algorithms/Numeric/GaussJordanElimination.cs )
45
+ * [ Keith Number Checker] ( ./Algorithms/Numeric/KeithNumberChecker.cs )
45
46
* [ Pseudo-Inverse] ( ./Algorithms/Numeric/Pseudoinverse/PseudoInverse.cs )
46
47
* [ Narcissistic Number Checker] ( ./Algorithms/Numeric/NarcissisticNumberChecker.cs )
47
48
* [ Perfect Number Checker] ( ./Algorithms/Numeric/PerfectNumberChecker.cs )
You can’t perform that action at this time.
0 commit comments