update
All checks were successful
Markup Tests / test (push) Successful in 8s
Markdown to Html Tests / test (push) Successful in 17s

This commit is contained in:
2026-02-17 09:32:08 +03:00
commit 2f05f238e9
109 changed files with 9369 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
package sum;
import java.math.BigDecimal;
import java.math.BigInteger;
/**
* @author Nikita Doschennikov (me@fymio.us)
*/
public class SumBigDecimalHex {
public static void main(String[] args) {
BigDecimal res = new BigDecimal("0");
for (String arg : args) {
StringBuilder builder = new StringBuilder();
int idxOfS = -1;
for (char c : arg.toCharArray()) {
if (!Character.isWhitespace(c)) {
if (c == 's' || c == 'S') {
idxOfS = builder.length();
}
builder.append(c);
} else {
res = res.add(compute(builder.toString(), idxOfS));
idxOfS = -1;
builder = new StringBuilder();
}
}
res = res.add(compute(builder.toString(), idxOfS));
}
System.out.println(res);
}
static BigDecimal compute(String num, int idxOfS) {
BigDecimal res = BigDecimal.ZERO;
if (num == null || num.isEmpty()) {
return res;
} else if (num.startsWith("0x") || num.startsWith("0X")) {
num = num.toLowerCase();
num = num.substring(2);
if (idxOfS != -1) {
idxOfS -= 2;
String mantissaHex = num.substring(0, idxOfS);
String exponentHex = num.substring(idxOfS + 1);
BigInteger mantissa = new BigInteger(mantissaHex, 16);
BigInteger exponent = new BigInteger(exponentHex, 16);
res = res.add(
new BigDecimal(mantissa).scaleByPowerOfTen(
exponent.negate().intValueExact()
)
);
} else {
res = res.add(new BigDecimal(new BigInteger(num, 16)));
}
} else {
res = new BigDecimal(num);
}
return res;
}
}