您的位置:首页 > 编程语言

第四章(数组) 编程题 1

2015-12-26 13:38 183 查看
题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如:

现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。 程序要处理的幂最大为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

题目难点分析:

多项式加减法,主要有以下难点,是一开始没考虑到的:

1. 某个多项式系数为1时,不能写成1x5,而应该是x5;

2. 某个多项式幂为1时,不能写成5x1,而应该是5x;

3. 首项前面不能加“+”号,因此需要做一个判断首项的记录;

4. 多项式只有0时输出0;

5. x的0次幂如果系数为0,则应该不输出,但我没实现出来……

以下是答案:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub

Scanner in = new Scanner(System.in);

int[] a = new int[10];
int[] b = new int[10];
boolean isfirst = true;

while (true)
{
int i = in.nextInt();
int j = in.nextInt();
a[i] = j;
if ( i == 0)
{
break;
}
}

while (true)
{
int i = in.nextInt();
int j = in.nextInt();
b[i] = j;
if ( i == 0)
{
break;
}
}
in.close();

for (int i =0; i < a.length ; i++)
{
if ( a[i] != 0 || b[i] != 0)
{
a[i] = a[i] + b[i];
}
}
for (int i = a.length-1 ; i > 0; i--)
{
if (a[i] > 0)
{
if ( isfirst)
{
isfirst = false;
}
else
{
System.out.print("+");
}
if ( a[i] == 1)
{
if ( i ==1)
{
System.out.print("x");
}
else
{
System.out.print("x" + i);
}
}
else
{
if ( i ==1)
{
System.out.print(a[i] + "x");
}
else
{
System.out.print(a[i] + "x" + i );
}
}

}
else if (a[i]<0)
{
if ( i == 1)
{
System.out.print(a[i] + "x");
}
else
{
System.out.print(a[i] + "x" + i );
}
}
}
if ( a[0] != 0 && isfirst==false)
{
System.out.print("+" + a[0]);
}
else
{
System.out.print(a[0]);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: