Skip to content

Commit 9220f7c

Browse files
authored
feat(maths): add DigitSum (#39)
1 parent 9fb8132 commit 9220f7c

File tree

2 files changed

+42
-0
lines changed

2 files changed

+42
-0
lines changed

Maths/DigitSum.ts

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @function DigitSum
3+
* @description Calculate the sum of all digits of a natural number (number base 10).
4+
* @param {number} num - A natural number.
5+
* @return {number} - Sum of all digits of given natural number.
6+
* @see https://en.wikipedia.org/wiki/Digit_sum
7+
* @example DigitSum(12) = 3
8+
* @example DigitSum(9045) = 18
9+
*/
10+
11+
export const DigitSum = (num: number): number => {
12+
if (num < 0 || !Number.isInteger(num)) {
13+
throw new Error("only natural numbers are supported");
14+
}
15+
16+
let sum = 0;
17+
while (num != 0) {
18+
sum += num % 10;
19+
num = Math.floor(num / 10);
20+
}
21+
22+
return sum;
23+
};

Maths/test/DigitSum.test.ts

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { DigitSum } from "../DigitSum";
2+
3+
describe("DigitSum", () => {
4+
test.each([-42, -0.1, -1, 0.2, 3.3, NaN, -Infinity, Infinity])(
5+
"should throw an error for non natural number %d",
6+
(num) => {
7+
expect(() => DigitSum(num)).toThrowError(
8+
"only natural numbers are supported",
9+
);
10+
},
11+
);
12+
13+
test.each([[0,0], [1, 1], [12, 3], [123, 6], [9045, 18], [1234567890, 45]])(
14+
"of %i should be %i",
15+
(num, expected) => {
16+
expect(DigitSum(num)).toBe(expected);
17+
},
18+
);
19+
});

0 commit comments

Comments
 (0)