import java.util.*;
import java.lang.*;
import java.math.*;
class Main {
public enum Distance {
METER
(new BigDecimal("1.0")),
// Base Unit is METER
private final static MathContext MC = new MathContext(30, RoundingMode.HALF_EVEN);
public static long convert(long value, Distance originalUnit, Distance resultingUnit) {
return resultingUnit.fromBaseUnit(originalUnit.toBaseUnit(value));
}
this.conversionRatio = conversionRatio;
}
return baseUnit.divide(conversionRatio, MC).longValue();
}
// returns BigDecimal to avoid rounding two times
// and possible division by zero
private BigDecimal toBaseUnit
(long originalUnit
) { return BigDecimal.
valueOf(originalUnit
).
multiply(conversionRatio
); }
}
System.
out.
println("2450 m in km is " + Distance.
convert(2450, Distance.
METER, Distance.
KM)); System.
out.
println("178 m in cm is " + Distance.
convert(178, Distance.
METER, Distance.
CM)); System.
out.
println("550 cm in m is " + Distance.
convert(550, Distance.
CM, Distance.
METER)); System.
out.
println("1 km in cm is " + Distance.
convert(1, Distance.
KM, Distance.
CM)); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLm1hdGguKjsKCmNsYXNzIE1haW4gewogICAgCiAgICBwdWJsaWMgZW51bSBEaXN0YW5jZSB7CiAgICAgICAgTUVURVIgKG5ldyBCaWdEZWNpbWFsKCIxLjAiKSksIC8vIEJhc2UgVW5pdCBpcyBNRVRFUgogICAgICAgIEtNKG5ldyBCaWdEZWNpbWFsKCIxRTMiKSksCiAgICAgICAgQ00obmV3IEJpZ0RlY2ltYWwoIjFFLTIiKSk7CiAgICAgICAgCiAgICAgICAgcHJpdmF0ZSBmaW5hbCBzdGF0aWMgTWF0aENvbnRleHQgTUMgPSBuZXcgTWF0aENvbnRleHQoMzAsIFJvdW5kaW5nTW9kZS5IQUxGX0VWRU4pOwogICAgICAgIAogICAgICAgIHB1YmxpYyBzdGF0aWMgbG9uZyBjb252ZXJ0KGxvbmcgdmFsdWUsIERpc3RhbmNlIG9yaWdpbmFsVW5pdCwgRGlzdGFuY2UgcmVzdWx0aW5nVW5pdCkgewogICAgICAgICAgICByZXR1cm4gcmVzdWx0aW5nVW5pdC5mcm9tQmFzZVVuaXQob3JpZ2luYWxVbml0LnRvQmFzZVVuaXQodmFsdWUpKTsKICAgICAgICB9CiAgICAKICAgICAgICBwcml2YXRlIGZpbmFsIEJpZ0RlY2ltYWwgY29udmVyc2lvblJhdGlvOwoKICAgICAgICBEaXN0YW5jZShCaWdEZWNpbWFsIGNvbnZlcnNpb25SYXRpbykgewogICAgICAgICAgICB0aGlzLmNvbnZlcnNpb25SYXRpbyA9IGNvbnZlcnNpb25SYXRpbzsKICAgICAgICB9CiAgICAKICAgICAgICBwcml2YXRlIGxvbmcgZnJvbUJhc2VVbml0KEJpZ0RlY2ltYWwgYmFzZVVuaXQpIHsKICAgICAgICAgICAgcmV0dXJuIGJhc2VVbml0LmRpdmlkZShjb252ZXJzaW9uUmF0aW8sIE1DKS5sb25nVmFsdWUoKTsKICAgICAgICB9CiAgICAKICAgICAgICAvLyByZXR1cm5zIEJpZ0RlY2ltYWwgdG8gYXZvaWQgcm91bmRpbmcgdHdvIHRpbWVzCiAgICAgICAgLy8gYW5kIHBvc3NpYmxlIGRpdmlzaW9uIGJ5IHplcm8KICAgICAgICBwcml2YXRlIEJpZ0RlY2ltYWwgdG9CYXNlVW5pdChsb25nIG9yaWdpbmFsVW5pdCkgewogICAgICAgICAgICByZXR1cm4gQmlnRGVjaW1hbC52YWx1ZU9mKG9yaWdpbmFsVW5pdCkubXVsdGlwbHkoY29udmVyc2lvblJhdGlvKTsKICAgICAgICB9CiAgICB9IAoKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbiB7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIyNDUwIG0gaW4ga20gaXMgIiArIERpc3RhbmNlLmNvbnZlcnQoMjQ1MCwgRGlzdGFuY2UuTUVURVIsIERpc3RhbmNlLktNKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCIxNzggbSBpbiBjbSBpcyAiICsgRGlzdGFuY2UuY29udmVydCgxNzgsIERpc3RhbmNlLk1FVEVSLCBEaXN0YW5jZS5DTSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiNTUwIGNtIGluIG0gaXMgIiArIERpc3RhbmNlLmNvbnZlcnQoNTUwLCBEaXN0YW5jZS5DTSwgRGlzdGFuY2UuTUVURVIpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIjEga20gaW4gY20gaXMgIiArIERpc3RhbmNlLmNvbnZlcnQoMSwgRGlzdGFuY2UuS00sIERpc3RhbmNlLkNNKSk7CiAgICB9Cn0=