1
多项式加法(5分)
题目内容:
一个多项式可以表达为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
下面代码 多处重合,目前要吐的状态,不想改了,。之前用二维数组做过,但有一个问题没解决,做不出来。贴在下面吧。用指针的方法更简单,可惜指针还没学透
等我指针学透了 在做一遍,更简单的代码
package homework;
import java.util.Scanner;
public class suma {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
//读入n,m
int n=in.nextInt();
int m=in.nextInt();
//存储 系数和幂数,幂为下表,系数为值
int a[]=new int[101];
while(n!=-1&&m!=-1) {
for(int i=0;i<a.length;i++) {
if(n==i) {
a[i]+=m;
}
}
n=in.nextInt();
m=in.nextInt();
}
//遍历找出最后一项系数为0的i
int t=0;
for(int j=0;j<a.length;j++) {
if(a[j]>0) {
t=j;
break;
}
}
if(t>1) {
//倒序输出
for(int i=a.length-1;i>t;i--) {
if(a[i]>1) {
System.out.print(a[i]+"x"+i+"+");
}else if(a[i]==1) {
System.out.print("x"+i+"+");
}
}
System.out.println(a[t]+"x"+t);
}else {
//倒序输出
for(int i=a.length-1;i>1;i--) {
if(a[i]>1) {
System.out.print(a[i]+"x"+i+"+");
}else if(a[i]==1) {
System.out.print("x"+i+"+");
}
}
//判断幂数为1 or 0 的情况
if(a[1]!=0) {
if(a[0]!=0) {
System.out.print(a[1]+"x"+"+"+a[0]);
}else {
System.out.print(a[1]+"x");
}
}else if(a[0]!=0) {
System.out.print(a[0]);
}
}
}
}
下面这个二维数组做的, 思路应该是对的,过程多出错误,还有一个问题没解决的??
package homework;
import java.util.Scanner;
public class mysum {
public static void main(String[] args) {
// TODO Auto-generated method stub
//存储 系数和指数 系数存进 第一列,幂数存进第二列
Scanner in=new Scanner(System.in);
int a[][]=new int[100][2];
int x=in.nextInt();
while(x!=-1) {
for(int i=0;i<100;i++) {
for(int j=0;j<2;j++) {
a[i][j]=x;
}
}
x=in.nextInt();
}
//冒泡排序 按照幂数从大到小排序
for(int i=a.length-2;i>0;i--) {
for(int j=0;j<a.length-1;j++) {
if(a[j][1]<a[j+1][1]) {
int temp;
temp=a[j][1];
a[j][1]=a[j+1][1];
a[j+1][1]=temp;
}
}
}
System.out.println(a[0][0]);
//遍历输出 如果幂数相同,系数相加,否则输出
for(int i=0;i<a.length-1;i++) {
int sum=a[i][0]; //sum为系数
if(a[i][1]==a[i+1][1]) { //??? 存储系数的时候
sum+=a[i+1][0]; //每循环就会初始系数,
}else{ //不知道怎么保存这个系数?
System.out.println(sum+"x"+a[i][1]+"+");
sum=0;
}
}
}
}