mirror of
https://github.com/TheAlgorithms/Java.git
synced 2025-07-09 20:20:56 +08:00
Cleanup SumOfDigits
and its tests (#4994)
This commit is contained in:
@ -1,13 +1,7 @@
|
|||||||
package com.thealgorithms.maths;
|
package com.thealgorithms.maths;
|
||||||
|
|
||||||
public class SumOfDigits {
|
public final class SumOfDigits {
|
||||||
|
private SumOfDigits() {
|
||||||
public static void main(String[] args) {
|
|
||||||
assert sumOfDigits(-123) == 6 && sumOfDigitsRecursion(-123) == 6 && sumOfDigitsFast(-123) == 6;
|
|
||||||
|
|
||||||
assert sumOfDigits(0) == 0 && sumOfDigitsRecursion(0) == 0 && sumOfDigitsFast(0) == 0;
|
|
||||||
|
|
||||||
assert sumOfDigits(12345) == 15 && sumOfDigitsRecursion(12345) == 15 && sumOfDigitsFast(12345) == 15;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -17,12 +11,12 @@ public class SumOfDigits {
|
|||||||
* @return sum of digits of given {@code number}
|
* @return sum of digits of given {@code number}
|
||||||
*/
|
*/
|
||||||
public static int sumOfDigits(int number) {
|
public static int sumOfDigits(int number) {
|
||||||
number = number < 0 ? -number : number;
|
final int base = 10;
|
||||||
/* calculate abs value */
|
number = Math.abs(number);
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
while (number != 0) {
|
while (number != 0) {
|
||||||
sum += number % 10;
|
sum += number % base;
|
||||||
number /= 10;
|
number /= base;
|
||||||
}
|
}
|
||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
@ -34,9 +28,9 @@ public class SumOfDigits {
|
|||||||
* @return sum of digits of given {@code number}
|
* @return sum of digits of given {@code number}
|
||||||
*/
|
*/
|
||||||
public static int sumOfDigitsRecursion(int number) {
|
public static int sumOfDigitsRecursion(int number) {
|
||||||
number = number < 0 ? -number : number;
|
final int base = 10;
|
||||||
/* calculate abs value */
|
number = Math.abs(number);
|
||||||
return number < 10 ? number : number % 10 + sumOfDigitsRecursion(number / 10);
|
return number < base ? number : number % base + sumOfDigitsRecursion(number / base);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -45,14 +39,7 @@ public class SumOfDigits {
|
|||||||
* @param number the number contains digits
|
* @param number the number contains digits
|
||||||
* @return sum of digits of given {@code number}
|
* @return sum of digits of given {@code number}
|
||||||
*/
|
*/
|
||||||
public static int sumOfDigitsFast(int number) {
|
public static int sumOfDigitsFast(final int number) {
|
||||||
number = number < 0 ? -number : number;
|
return String.valueOf(Math.abs(number)).chars().map(c -> c - '0').reduce(0, Integer::sum);
|
||||||
/* calculate abs value */
|
|
||||||
char[] digits = (number + "").toCharArray();
|
|
||||||
int sum = 0;
|
|
||||||
for (int i = 0; i < digits.length; ++i) {
|
|
||||||
sum += digits[i] - '0';
|
|
||||||
}
|
|
||||||
return sum;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,31 +1,31 @@
|
|||||||
package com.thealgorithms.maths;
|
package com.thealgorithms.maths;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import java.util.stream.Stream;
|
||||||
|
import org.junit.jupiter.api.Assertions;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.Arguments;
|
||||||
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
|
|
||||||
class SumOfDigitsTest {
|
class SumOfDigitsTest {
|
||||||
|
@ParameterizedTest
|
||||||
SumOfDigits SoD = new SumOfDigits();
|
@MethodSource("testCases")
|
||||||
|
void sumOfDigitsTest(final int expected, final int input) {
|
||||||
@Test
|
Assertions.assertEquals(expected, SumOfDigits.sumOfDigits(input));
|
||||||
void testZero() {
|
|
||||||
assertEquals(0, SumOfDigits.sumOfDigits(0));
|
|
||||||
assertEquals(0, SumOfDigits.sumOfDigitsRecursion(0));
|
|
||||||
assertEquals(0, SumOfDigits.sumOfDigitsFast(0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testPositive() {
|
@MethodSource("testCases")
|
||||||
assertEquals(15, SumOfDigits.sumOfDigits(12345));
|
void sumOfDigitsRecursionTest(final int expected, final int input) {
|
||||||
assertEquals(15, SumOfDigits.sumOfDigitsRecursion(12345));
|
Assertions.assertEquals(expected, SumOfDigits.sumOfDigitsRecursion(input));
|
||||||
assertEquals(15, SumOfDigits.sumOfDigitsFast(12345));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@ParameterizedTest
|
||||||
void testNegative() {
|
@MethodSource("testCases")
|
||||||
assertEquals(6, SumOfDigits.sumOfDigits(-123));
|
void sumOfDigitsFastTest(final int expected, final int input) {
|
||||||
assertEquals(6, SumOfDigits.sumOfDigitsRecursion(-123));
|
Assertions.assertEquals(expected, SumOfDigits.sumOfDigitsFast(input));
|
||||||
assertEquals(6, SumOfDigits.sumOfDigitsFast(-123));
|
}
|
||||||
|
|
||||||
|
private static Stream<Arguments> testCases() {
|
||||||
|
return Stream.of(Arguments.of(0, 0), Arguments.of(1, 1), Arguments.of(15, 12345), Arguments.of(6, -123), Arguments.of(1, -100000), Arguments.of(8, 512));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user