4 条题解

  • 1
    @ 2023-12-9 14:03:08

    Python

    round()函数可以直接四舍五入,这算不算作弊? 只用一行代码就可以了

    print(round(float(input()) + float(input()), int(input())))
    
    • @ 2023-12-9 20:12:05

      python自动开高精度,赢!

  • 0
    @ 2023-12-10 17:38:51

    高精度写法,不使用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
      @ 2023-12-9 17:54:47

      四舍五入

      方法一:用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
        @ 2023-12-9 17:26:09
        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
        上传者