题目内容:

一个多项式可以表达为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 零基础学Java语言_翁恺;

import java.util.Scanner;

public class Fifth_Week
{

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int[] a = new int[101];
		int m = 0, n = 0;
		boolean flag = false;
		for(int i=0;i<100;i++)
			a[i]=0;
		int m_max = 0;
		// 读入第一个多项式
		do
		{
			m = in.nextInt();
			n = in.nextInt();
			a[m] = n;
			if (m > m_max)
				m_max = m;
		}while(m!=0);
		// 读入第二个多项式
		do
		{
			m = in.nextInt();
			n = in.nextInt();
			a[m] += n;
			if (m > m_max)
				m_max = m;
		}while (m!=0);
		for (int j = m_max; j >=0; j--)
		{
			if (a[j] != 0)
			{
				if(a[j]>0&&flag==true)
					System.out.print("+");
				if(a[j]!=1)
					System.out.print(a[j]);
				if(j!=1&&j!=0)
					System.out.print("x"+j);
				if(j==1)
					System.out.print("x");
				flag=true;
			}
		}
		in.close();
	}

}
只有一个测试点没过.....不想改了.....
总结:
用一个大小为101的数组来存系数,数组的下标即为幂指数....
若系数不为0则输出...
需要注意的是:
        系数为1或-1时不用输出系数;
        系数小于0时,不输出加号;
        幂指数为1时,不输出幂指数;
        幂指数为0时,只输出系数;
开始的思路是对幂指数为0或1时的输出单独处理,但没有考虑到系数为1或-1的情况...导致没有一个测试点通过...
错误代码如下:
package 零基础学Java语言_翁恺;

import java.util.Scanner;

public class Fifth_Week
{

	public static void main(String[] args)
	{
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in 

);
		int[] a = new int[101];
		int m = 0, n = 0;
		boolean flag = false;
		for(int i=0;i<100;i++)
			a[i]=0;
		int m_max = 0;
		// 读入第一个多项式
		do
		{
			m = in.nextInt();
			n = in.nextInt();
			a[m] = n;
			if (m > m_max)
				m_max = m;
		}while(m!=0);
		// 读入第二个多项式
		do
		{
			m = in.nextInt();
			n = in.nextInt();
			a[m] += n;
			if (m > m_max)
				m_max = m;
		}while (m!=0);
		for (int j = m_max; j > 1; j--)
		{
			if (a[j] != 0)
			{
				if (flag&&a[j]>0)
					System.out.print("+");
				if(a[j]==-1)
					System.out.print("-");
				flag = true;
				System.out.print(a[j] + "x" + j);
			}
			else
				continue;
		}
		// 处理幂次为1的情况
		if (a[1] != 0)
		{
			if (flag&&a[1]>0)
				System.out.print("+");
			if(a[1]==-1)
				System.out.print("-");
			System.out.print(a[1] + "x");
			flag = true;
		}
		// 处理幂次为0的情况
		if (a[0] != 0)
		{
			if (flag)
				System.out.print("+");
			System.out.print(a[0]);
		}
		// System.out.println();
		in.close();
	}

}
补充:
       把源码发到了MOOC的讨论区,在热心网友的帮助下,终于找到了有一个测试点没通过的原因.....
       对于系数全部为0的情况,程序会无输出.....
       例:对于下列这组数据
6 3
2 5
0 3
6 -3
2 -5
0 -3
       在in.close()前面加上这一段就好了
		if(!flag)
			System.out.print("0");