題目內容:
一個多項式可以表達為x的各次冪與系數乘積的和,比如:
2x6+3x5+12x3+6x+20
現在,你的程序要讀入兩個多項式,然后輸出這兩個多項式的和,也就是把對應的冪上的系數相加然后輸出。
程序要處理的冪最大為100。
輸入格式:
總共要輸入兩個多項式,每個多項式的輸入格式如下:
每行輸入兩個數字,第一個表示冪次,第二個表示該冪次的系數,所有的系數都是整數。第一行一定是最高冪,最后一行一定是0次冪。
注意第一行和最后一行之間不一定按照冪次降低順序排列;如果某個冪次的系數為0,就不出現在輸入數據中了;0次冪的系數為0時還是會出現在輸入數據中。
輸出格式:
從最高冪開始依次降到0冪,如:
2x6+3x5+12x3-6x+20
注意其中的x是小寫字母x,而且所有的符號之間都沒有空格,如果某個冪的系數為0則不需要有那項。
輸入樣例:
6 2
5 3
3 12
1 6
0 20
6 2
5 3
2 12
1 6
0 20
輸出樣例:
4x6+6x5+12x3+12x2+12x+40
時間限制:500ms內存限制:32000kb
package pro;
import java.util.Scanner;
public class main3 {
public static void main(String[] args) {
int[]a=new int[101];
int[]b=new int [101];
Scanner scan=new Scanner(System.in);
int next;//保存輸入值
boolean flag1=false;//前面都有數
boolean flag2=false;//前面都有數
while((next=scan.nextInt())!=0) {
a[next]+=scan.nextInt();
}
a[0]+=scan.nextInt();
while((next=scan.nextInt())!=0) {
b[next]+=scan.nextInt();
}
b[0]+=scan.nextInt();
//輸出最高冪次項(大于2)+x6和x6
//要考慮:1.系數是負數2.系數是正負一時,不輸出一
int i=100;
for(;i>=2;--i) {
if(a[i]+b[i]!=0) {
System.out.print((a[i]+b[i]>0?"":"-")+(Math.abs(a[i]+b[i])==1?"":Math.abs(a[i]+b[i]))+"x"+i);
flag1=true;
flag2=true;
break;
}
}
--i;
//系數不為零時和x平方及以上,要考慮:1.正負2.正負一 x6+1x2和x6+x2
for(;i>=2;--i) {
if(a[i]+b[i]!=0) {
System.out.print((a[i]+b[i]>0?"+":"-")+(Math.abs(a[i]+b[i])==1?"":Math.abs(a[i]+b[i]))+"x"+i);
}
}
//若有最高次項(大于1次), 則一次方的項的輸出,x2+1x和x2+x
if(flag1) {
if(a[1]+b[1]!=0) {
System.out.print((a[1]+b[1]>0?"+":"-")+(Math.abs(a[1]+b[1])==1?"":Math.abs(a[1]+b[1]))+"x");
flag2=true;
}
}
//若沒有最高次項,一次方項的輸出,+x和x
else {
if(a[1]+b[1]!=0) {
System.out.print((a[1]+b[1]>0?"":"-")+(Math.abs(a[1]+b[1])==1?"":Math.abs(a[1]+b[1]))+"x");
flag1=true;
flag2=true;
}
}
//若最高次項為一次x+8,和8的區別
if(flag1) {
if(a[0]+b[0]!=0) {
System.out.print((a[0]+b[0]>0?"+":"-")+Math.abs(a[0]+b[0]));
flag2=true;
}
}else {
if(a[0]+b[0]!=0) {
System.out.print((a[0]+b[0]>0?"":"-")+Math.abs(a[0]+b[0]));
flag2=true;
}
}
//兩個多項式都為0
if(!flag2) {
System.out.print(0);
}
scan.close();
}
}