Files
codejava.tech/content/courses/prog-intro/homeworks/sum/SumBigDecimalHex/SumBigDecimalHex.java
me 77165a7999
All checks were successful
Deploy / deploy (push) Successful in 17s
update
2026-04-22 08:46:19 +03:00

53 lines
1.7 KiB
Java

// SumBigDecimalHex.java
import java.math.BigDecimal;
import java.math.BigInteger;
public class SumBigDecimalHex {
public static void main(String[] args) {
BigDecimal sum = new BigDecimal("0");
for (String argument : args) {
StringBuilder number = new StringBuilder();
for (char c : argument.toCharArray()) {
if (!Character.isWhitespace(c)) {
number.append(c);
} else {
sum = sum.add(parseNumber(number));
number = new StringBuilder();
}
}
sum = sum.add(parseNumber(number));
}
System.out.println(sum);
}
static BigDecimal parseNumber(StringBuilder number) {
if (!number.isEmpty()) {
String numberString = number.toString().toLowerCase();
if (numberString.startsWith("0x")) {
numberString = numberString.substring(2);
if (numberString.contains("s")) {
int indexOfS = numberString.indexOf('s');
String mantissaHexString = numberString.substring(0, indexOfS);
String exponentHexString = numberString.substring(indexOfS + 1);
BigInteger mantissa = new BigInteger(mantissaHexString, 16);
BigInteger exponent = new BigInteger(exponentHexString, 16);
return new BigDecimal(mantissa).scaleByPowerOfTen(exponent.negate().intValueExact());
}
return new BigDecimal(new BigInteger(numberString, 16));
} else {
return new BigDecimal(numberString);
}
} else {
return BigDecimal.ZERO;
}
}
}