4 条题解
-
0
高精度写法,不使用bigdecimal
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 读入两个小数,并将小数部分拆分为整数部分和小数部分 String[] a1 = sc.next().split("\\."); String[] a2 = sc.next().split("\\."); // 读入需要保留的小数位数 int k = sc.nextInt(); // 计算两个小数的整数部分之和 int zheng = Integer.parseInt(a1[0]) + Integer.parseInt(a2[0]); // 初始化小数部分为0 String d1 = "0"; String d2 = "0"; // 如果输入数字的小数部分有数字,给小数部分的值赋给d1,d2 if(a1.length != 1){ d1 = a1[1]; } if(a2.length != 1){ d2 = a2[1]; } int len1 = d1.length(); int len2 = d2.length(); int ll = Math.max(len1, len2); // 第一种情况 保留位数大于两数的小数部分的长度最大值 if(k >= Math.max(len1, len2)){ // 创建数组模拟每一位的大小 int[] arr = new int[ll]; // 写入 for (int i = 0; i < len1; i++) { arr[i] += d1.charAt(i) - '0'; } for (int i = 0; i < len2; i++) { arr[i] += d2.charAt(i) - '0'; } int temp = 0; // 进位处理 for (int i = ll - 1; i >= 0; i--) { arr[i] += temp; temp = 0; if(arr[i] > 9){ temp = 1; arr[i] -= 10; } } zheng += temp; int i = ll - 1; // 抹掉末尾位的0 while (i != 0 && arr[i] == 0){ i--; } // 拼接小数部分输出结果 StringBuilder sb = new StringBuilder(); for (int j = 0; j <= i; j++) { sb.append(arr[j]); } System.out.println(zheng + "." + sb); }else { // 第二种情况 保留位数小于两数的小数部分的长度最大值 int[] arr = new int[k + 1]; for (int i = 0; i < arr.length && i < len1; i++) { arr[i] += d1.charAt(i) - '0'; } for (int i = 0; i < arr.length && i < len2; i++) { arr[i] += d2.charAt(i) - '0'; } int temp = 0; // 如果保留数字位的后一位大于等于5, 给temp(进位数字)赋值为1 if(arr[k] >= 5) temp = 1; for (int i = arr.length - 2; i >= 0; i--) { arr[i] += temp; temp = 0; if(arr[i] > 9){ temp = 1; arr[i] -= 10; } } zheng += temp; StringBuilder sb = new StringBuilder(); // 拼接小数位 for (int i = 0; i < k; i++) { sb.append(arr[i]); } // 去掉末尾0 sb.reverse(); int dou = Integer.parseInt(sb.toString()); sb = new StringBuilder(dou +""); sb.reverse(); // 输出结果 System.out.println(zheng + "." + sb); } } }
-
0
四舍五入
方法一:用soutf
方法二:用BigDecimal
Scanner sc=new Scanner(System.in);
String a=sc.next();
String b=sc.next();
int k=sc.nextInt();
BigDecimal a1=new BigDecimal(a);
BigDecimal b1=new BigDecimal(b);
double ans=a1.add(b1).setScale(k,Rounding.HALF. UP).doubleValue();
System.out.println(ans);
-
0
import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { Scanner sc = new Scanner(System.in); double a = sc.nextDouble(); double b = sc.nextDouble(); int c = sc.nextInt(); System.out.println(Math.round((a+b)*Math.pow(10,c))/Math.pow(10,c)); } }
- 1
信息
- ID
- 567
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 130
- 已通过
- 21
- 上传者