JAVA hdu 1753 大明A+B(高精度)

来源:互联网 发布:文泰刻绘软件注册码 编辑:程序博客网 时间:2024/05/10 08:25

在网上搜到了Bigdecimal这个类,可以直接用来处理高精度问题。然后就卡在了输出上。

后来搜到了两个方法:

stripTrailingZeros

public BigDecimal stripTrailingZeros()
返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。例如,从 BigDecimal 值 600.0 中移除尾部零,该值具有的 [BigIntegerscale] 组件等于 [6000, 1],使用 [BigIntegerscale] 组件生成的 6E2 等于 [6, -2]

返回:
数值上等于移除所有尾部零的 BigDecimal

toPlainString

public String toPlainString()
返回不带指数字段的此 BigDecimal 的字符串表示形式。对于具有正标度的值,小数点右边的数字个数用于指示标度。对于具有零或负标度的值,生成得到的字符串,好像将该值转换为在数值上等于具有零标度的值一样,并且好像零标度值的所有尾部零都出现在该结果中。 如果非标度值小于零,则整个字符串以减号 '-' ('\u002D') 为前缀。如果非标度值为零或正数,则没有任何符号字符作为前缀。 注意,如果将此方法的结果传递到 string constructor,则只需要恢复此 BigDecimal 的数值;新的 BigDecimal 的表示形式可以有不同的标度。尤其是,如果此 BigDecimal 具有负标度,则在由字符串构造方法进行处理时,此方法产生的字符串将具有零标度。 (此方法的作用类似于 1.4 和更早版本中的 toString 方法。)

返回:
不带指数字段的此 BigDecimal 的字符串表示形式。

开始我一直不明白为什么还要加上第二个方法,后来看到是因为在小数点后面很长的时候,返回值会用科学计数法。示例:点这里。

import java.util.Scanner;import java.math.BigDecimal;class Main {public static void main(String[] args) {BigDecimal aBigDecimal = new BigDecimal(0.0);BigDecimal bBigDecimal = new BigDecimal(0.0);Scanner inScanner = new Scanner(System.in);while (inScanner.hasNextLine()) {aBigDecimal = inScanner.nextBigDecimal();bBigDecimal = inScanner.nextBigDecimal();System.out.println(aBigDecimal.add(bBigDecimal).stripTrailingZeros().toPlainString());}}}


0 0
原创粉丝点击