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;
    }
}
