日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時(shí)間:2025/3/15 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 打印多项式的那些坑(洛谷P1067题题解,Java语言描述) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

我之前寫過一篇有關(guān)解一元一次方程的那些坑的博客,那個(gè)題的細(xì)節(jié)還是比較多的,對(duì)于沒經(jīng)驗(yàn)的人呢,確實(shí)是各種WAWA大哭。
這里是多項(xiàng)式,按照格式打,看下去,讓我們看看有哪些坑吧~~
(也是黃題,稍有麻煩,不算太難)

題目要求

P1067題目鏈接

分析

我們要明確,最高位固定的情況下,N位一共有N+1項(xiàng)。

首先是單獨(dú)的常數(shù)項(xiàng)或者ax+b兩種大情況。
為什么單獨(dú)拎出來呢?
因?yàn)楸热缯f二次項(xiàng),ax^2,但一次項(xiàng)是ax,不能寫成 ax^1。
如果不加以特判的話,開始項(xiàng)就不能得以區(qū)分。

在處理細(xì)節(jié)的時(shí)候注意:

  • 開頭項(xiàng)的+不顯示,但-顯示;非開頭項(xiàng)的+要作為加號(hào)進(jìn)行連接,這是一個(gè)細(xì)節(jié)。
  • 當(dāng)系數(shù)為0的時(shí)候,就一定要去掉這一項(xiàng)(不顯示)。
  • 很坑的一個(gè)問題是我們可以寫x^2+1,不能寫 1x^2+1,這不符合習(xí)慣。
    (這也是我第一次WA的原因)

在多次項(xiàng)(當(dāng)次數(shù)大于等于2的時(shí)候,進(jìn)行常規(guī)判斷流程)進(jìn)行連接的時(shí)候,連接用+和-,但負(fù)數(shù)本身帶-,正數(shù)不帶+,所以要在正數(shù)前補(bǔ)“+”,負(fù)數(shù)則權(quán)當(dāng)忽略不做處理。畢竟負(fù)號(hào)和減號(hào)在連接的時(shí)候等價(jià)。
要將后面特殊的一次項(xiàng)和常數(shù)項(xiàng)進(jìn)行特殊化處理,當(dāng)做尾部連接部分連接上去。

再說說Java處理這種問題的一些語法細(xì)節(jié)。
為了避免多種情況的嵌套,我們可以不做else處理,而是對(duì)已有步驟直接進(jìn)行System.out.println()然后return; main()方法也是一個(gè)函數(shù),return即可結(jié)束函數(shù)。
鑒于大量的運(yùn)用“+”進(jìn)行字符串連接效率低(因?yàn)橐D(zhuǎn)StringBuilder然后開循環(huán)balabala),直接用StringBuilder就好啦~~

感興趣的可以康康代碼,容易理解,Fine~

第一次提交WA掉了,Share一下評(píng)測(cè)數(shù)據(jù)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
(請(qǐng)注意我加了兩個(gè)空格(方便博客的顯示),但實(shí)際上是沒有的,請(qǐng)務(wù)必注意)

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();} }

總結(jié)

以上是生活随笔為你收集整理的打印多项式的那些坑(洛谷P1067题题解,Java语言描述)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。