JavaAlgorithms/Maths/SumOfDigits.java

63 lines
1.9 KiB
Java
Raw Normal View History

2020-08-16 23:04:34 +08:00
package Maths;
public class 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;
}
/**
* Calculate the sum of digits of a number
*
* @param number the number contains digits
* @return sum of digits of given {@code number}
*/
public static int sumOfDigits(int number) {
number = number < 0 ? -number : number; /* calculate abs value */
int sum = 0;
while (number != 0) {
sum += number % 10;
number /= 10;
}
return sum;
}
/**
* Calculate the sum of digits of a number using recursion
*
* @param number the number contains digits
* @return sum of digits of given {@code number}
*/
public static int sumOfDigitsRecursion(int number) {
number = number < 0 ? -number : number; /* calculate abs value */
return number < 10 ? number : number % 10 + sumOfDigitsRecursion(number / 10);
}
/**
* Calculate the sum of digits of a number using char array
*
* @param number the number contains digits
* @return sum of digits of given {@code number}
*/
public static int sumOfDigitsFast(int number) {
number = number < 0 ? -number : number; /* calculate abs value */
char[] digits = (number + "").toCharArray();
int sum = 0;
for (int i = 0; i < digits.length; ++i) {
sum += digits[i] - '0';
}
return sum;
}
}