AcWing
  • 首页
  • 题库
  • 题解
  • 分享
  • 问答
  • 活动
  • 应用
  • 吐槽
  • 登录/注册

PAT甲级多项式相乘,精度问题



1


题目链接 PAT甲级多项式相乘
这个测试案例有时向上取整有时向下取整,有两个点就卡在那,请问大佬怎么改

两分代码都过不去,第二份在官网上能过去
错误的代码:

一:

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        BigDecimal []arr=new BigDecimal[1010];
        BigDecimal []arr2=new BigDecimal[1010];
        BigDecimal []res=new BigDecimal[2020];
        for(int i=0;i<1010;i++){
            arr[i]=BigDecimal.ZERO;
            arr2[i]=BigDecimal.ZERO;
        }
        for(int i=0;i<2020;i++){
            res[i]=BigDecimal.ZERO;
        }
        int n=input.nextInt();
        for(int i=0;i<n;i++){
            int N=input.nextInt();
            BigDecimal a=input.nextBigDecimal();
            arr[N]=arr[N].add(a);
        }
        int m=input.nextInt();
        for(int i=0;i<m;i++){
            int N=input.nextInt();
            BigDecimal a=input.nextBigDecimal();
            arr2[N]=arr2[N].add(a);
        }
        BigDecimal e=new BigDecimal("0");
        for(int i=0;i<1010;i++){
            for(int j=0;j<1010;j++){
                {
                    //系数相乘指数相加
                    if (!arr[i].equals(e)&&!arr2[j].equals(e)) {
                        BigDecimal temp = arr[i].multiply(arr2[j]);
                        res[i + j] = res[i + j].add(temp);
                    }
                }
            }
        }
        int k=0;

        for(int i=0;i<2020;i++){
            if(!res[i].equals(e)){
                k++;
            }
        }
        System.out.print(k);
        for(int i=2019;i>=0;i--){
            if(!res[i].equals(e)){
                BigDecimal result=res[i].setScale(1, RoundingMode.HALF_UP);
            System.out.print(" "+i+" "+result);
            }
        }

    }
}

二:


    import java.text.DecimalFormat;
    import java.util.Scanner;

    public class Main {

        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            double[] f1 = new double[1010];
            double[] f2 = new double[1010];
            double[] f3 = new double[2020];
            int n = in.nextInt();
            for(int i = 0; i<n; i++){
                int index = in.nextInt();
                f1[index] = in.nextDouble();
            }
            n = in.nextInt();
            for(int i = 0; i<n; i++){
                int index = in.nextInt();
                f2[index] = in.nextDouble();
            }
            for(int i = 0; i<1010; i++){
                if(f1[i]!=0.0){
                    for(int j = 0; j<1010; j++){
                        if(f2[j]!=0.0){
                            f3[i+j] += f1[i]*f2[j];
                        }
                    }
                }
            }
            int cnt = 0;
            for(int i = 2000; i>=0; i--){
                if(f3[i]!=0.0)
                    cnt++;
            }
            System.out.print(cnt);
            for(int i = 2000; i>=0; i--){
                if(f3[i]!=0.0){
                    System.out.print(" "+i+" ");
                    System.out.printf("%.1f",f3[i]);
                }

            }
            System.out.println();
        }

    }






提问于4天前
滘
2422


0 个问答


我来回答
你确定删除吗?

© 2018-2020 AcWing 版权所有  |  京ICP备17053197号-1
联系我们  |  常见问题
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息