试题描述
系统会随机给你一个数组(存放都是数字),你需要将里面值累加,最后四舍五入,保留20位小数
输入
数字类型的数组,长度不固定
例如:”58.000000000000006000019”,”8.000000000000000000011”,”45.00000000000000000001”,”4.00000000000000000001”
输出
输出结果 数组累加值 115.00000000000000600005
输入示例
"5.89","8.0","6.54","7.951","15.6258"
输出示例
44.00680000000000000000
思路
- 高精度计算使用BigDecimal
- 如果BigDecimal的精度都不够的话,只能用String保存,然后转成char[]按位相加(小学学加法用的方法……),不过还好,在本题用BigDecimal足够了
package com.vapy.offer;
import java.math.BigDecimal;
import java.util.Scanner;
/**
*
* @author vapy 2016年10月6日
*
*/
public class Main9 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String[] str = input.split(",");
BigDecimal[] bgInput = new BigDecimal[str.length];
BigDecimal result = new BigDecimal(0);
for (int i = 0, len = str.length; i < len; i++) {
str[i] = str[i].replaceAll("\"", "");
str[i] = str[i].replaceAll(" ", "");
result = result.add(new BigDecimal(str[i]));
}
System.out.println(result.setScale(20, BigDecimal.ROUND_HALF_UP));
}
}
本文代码可在github查看:点击此处