Skip to content

Commit 54d6e97

Browse files
authored
feat(maths): added NumberOfDigits (TheAlgorithms#101)
* feat(maths): added NumberOfDigits * fix: handled 0 input in NumberOfDigits
1 parent 9bec267 commit 54d6e97

2 files changed

Lines changed: 37 additions & 0 deletions

File tree

maths/number_of_digits.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/**
2+
* @function NumberOfDigits
3+
* @description Calculate the number of digits of a natural number.
4+
* @param {number} num - A natural number.
5+
* @return {number} - Number of digits of given natural number.
6+
* @see https://math.stackexchange.com/a/231745/518862
7+
* @example NumberOfDigits(18) = 2
8+
* @example NumberOfDigits(294568) = 6
9+
* @example NumberOfDigits(128798319794) = 12
10+
*/
11+
12+
export const NumberOfDigits = (num: number): number => {
13+
if (num <= 0 || !Number.isInteger(num)) {
14+
throw new Error("only natural numbers are supported");
15+
}
16+
17+
return Math.floor(Math.log10(num)) + 1;
18+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { NumberOfDigits } from "../number_of_digits";
2+
3+
describe("NumberOfDigits", () => {
4+
test.each([-890, -5.56, -7, 0, 0.73, 4.2, NaN, -Infinity, Infinity])(
5+
"should throw an error for non natural number %d",
6+
(num) => {
7+
expect(() => NumberOfDigits(num)).toThrowError(
8+
"only natural numbers are supported",
9+
);
10+
},
11+
);
12+
13+
test.each([[1, 1], [18, 2], [549, 3], [7293, 4], [1234567890, 10]])(
14+
"of %i should be %i",
15+
(num, expected) => {
16+
expect(NumberOfDigits(num)).toBe(expected);
17+
},
18+
);
19+
});

0 commit comments

Comments
 (0)