打印多项式的那些坑(洛谷P1067题题解,Java语言描述)

前言

我之前写过一篇有关解一元一次方程的那些坑的博客,那个题的细节还是比较多的,对于没经验的人呢,确实是各种WAWA大哭。
这里是多项式,按照格式打,看下去,让我们看看有哪些坑吧~~
(也是黄题,稍有麻烦,不算太难)

题目要求

P1067题目链接
在这里插入图片描述
在这里插入图片描述

分析

我们要明确,最高位固定的情况下,N位一共有N+1项。

首先是单独的常数项或者ax+b两种大情况。
为什么单独拎出来呢?
因为比如说二次项,ax^2,但一次项是ax,不能写成 ax^1。
如果不加以特判的话,开始项就不能得以区分。

在处理细节的时候注意:

  • 开头项的+不显示,但-显示;非开头项的+要作为加号进行连接,这是一个细节。
  • 当系数为0的时候,就一定要去掉这一项(不显示)。
  • 很坑的一个问题是我们可以写x^2+1,不能写 1x^2+1,这不符合习惯。
    (这也是我第一次WA的原因)

在多次项(当次数大于等于2的时候,进行常规判断流程)进行连接的时候,连接用+和-,但负数本身带-,正数不带+,所以要在正数前补“+”,负数则权当忽略不做处理。毕竟负号和减号在连接的时候等价。
要将后面特殊的一次项和常数项进行特殊化处理,当做尾部连接部分连接上去。

再说说Java处理这种问题的一些语法细节。
为了避免多种情况的嵌套,我们可以不做else处理,而是对已有步骤直接进行System.out.println()然后return; main()方法也是一个函数,return即可结束函数。
鉴于大量的运用“+”进行字符串连接效率低(因为要转StringBuilder然后开循环balabala),直接用StringBuilder就好啦~~

感兴趣的可以康康代码,容易理解,Fine~

第一次提交WA掉了,Share一下评测数据3

in
99
-1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 100 1 8

out
-x^99 -7x^50 +100x^2+x+8
(请注意我加了两个空格(方便博客的显示),但实际上是没有的,请务必注意)

AC代码(Java语言描述)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        if (num == 0) {
            System.out.println();
            return;
        }
        int head = scanner.nextInt();
        if (num == 1) {
            System.out.println(head);
            return;
        } else if (num == 2) {
            int rear = scanner.nextInt();
            if (head == 1) {
                System.out.print("x");
            } else if (head == -1) {
                System.out.print("-x");
            } else {
                System.out.print(head + "x");
            }
            if (rear > 0) {
                System.out.println("+" + rear);
            } else if (rear < 0) {
                System.out.println(rear);
            }
            return;
        }
        StringBuilder builder = new StringBuilder();
        if (head == 1) {
            builder.append("x^" + num);
        } else if (head == -1) {
            builder.append("-x^" + num);
        } else {
            builder.append(head + "x^" + num);
        }
        for (int i = num-1; i >= 2; i--) {
            int temp = scanner.nextInt();
            if (temp == 1) {
                builder.append("+x^" + i);
            } else if (temp == -1) {
                builder.append("-x^" + i);
            } else if (temp > 0) {
                builder.append("+" + temp + "x^" + i);
            } else if (temp < 0) {
                builder.append(temp + "x^" + i);
            }
        }
        int first = scanner.nextInt();
        if (first == 1) {
            builder.append("+x");
        } else if (first == -1) {
            builder.append("-x");
        } else if (first > 0) {
            builder.append("+" + first + "x");
        } else if (first < 0) {
            builder.append(first + "x");
        }
        int rear = scanner.nextInt();
        if (rear > 0) {
            builder.append("+" + rear);
        } else if (rear < 0) {
            builder.append(rear);
        }
        System.out.println(builder.toString());
        scanner.close();
    }
}

发布了351 篇原创文章 · 获赞 610 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104055803
今日推荐