已经解决了
多项式加法(5分)
题目内容:
一个多项式可以表达为x的各次幂与系数乘积的和,比如:
2x6+3x5+12x3+6x+20
现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。
程序要处理的幂最大为100。
输入格式:
总共要输入两个多项式,每个多项式的输入格式如下:
每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。
注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。
输出格式:
从最高幂开始依次降到0幂,如:
2x6+3x5+12x3-6x+20
注意其中的x是小写字母x,而且所有的符号之间都没有空格,如果某个幂的系数为0则不需要有那项。
import java.util.Scanner;
public class zuoye52 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int[][]a= new int[2][101];
int[][]b= new int[2][101];
int cnt;
int cnb;
int max =0;
//初始化 2行100列 第一行填入幂次 第二行做系数
for( cnt= 0;cnt<101; )
{
a[0][cnt]=cnt;
cnt++;
}
for( cnb= 0;cnb<101; )
{
b[0][cnb]=cnb;
cnb++;
}
//读入 第一个行列式
do
{
cnt=in.nextInt();
a[1][cnt]=in.nextInt();
}while(cnt!=0);
//读入 第二个行列式
do
{
cnb=in.nextInt();
b[1][cnb]=in.nextInt();
}while(cnb!=0);
//输出
for(int j=101; j>=0;j--)
{
int sum=0;
//系数相加
if(j<101)
{
sum+=a[1][j]+b[1][j];
}
if(sum==0)
{
continue;
}
//输出
if(j>1)
{[
System.out.print(sum+"x"+j+"+");
}
else if(j==0)
{
if(a[1][0]+b[1][0]==0)
{
System.out.print("0");
}
else
{
System.out.print(sum);
}
}
else if(j==1)
{
System.out.print(sum+"x"+"+");
}
}
}
}
测试结果
1 2 0 0
2 3 0 0
3x2+2x+
1 2 0 10
3 2 0 20
2x3+2x+30
///////
2 1 3 1 0 10
4 1 5 1 11 1 0 0
1x11+1x5+1x4+1x3+1x2+10
新代码
import java.util.Scanner;
public class zuoye52 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int[][]a= new int[2][101];
int[][]b= new int[2][101];
int cnt;
int cnb;
int sam=0;
boolean jieguo=false;
//初始化 2行100列 第一行填入幂次 第二行做系数
for( cnt= 0;cnt<101; )
{
a[0][cnt]=cnt;
cnt++;
}
for( cnb= 0;cnb<101; )
{
b[0][cnb]=cnb;
cnb++;
}
//读入 第一个行列式
do
{
cnt=in.nextInt();
a[1][cnt]=in.nextInt();
}while(cnt!=0);
//读入 第二个行列式
do
{
cnb=in.nextInt();
b[1][cnb]=in.nextInt();
}while(cnb!=0);
//输出
for(int i=0; i< 101; i++)
{
sam+=a[1][i]+b[1][i];
}
// 遍历 结果为零时 输出0
if(sam==0)
System.out.print("0");
// 结果不为零时
else
{
boolean fb=true;
for(int j=101; j>=0;j--)
{
int sum=0;
//系数相加
if(j<101)
{
sum+=a[1][j]+b[1][j];
}
if(sum==0)
{
continue;
}
//输出最高次 +1 -1
if(j>=1&&fb&&sum!=0)
{
if(sum==1)
System.out.print("x"+j);
else
{
//-1 及其他
if(sum==-1)
System.out.print("-"+"x"+j);
else
System.out.print(sum+"x"+j);
}
fb=false;
continue;
}
//输出低次 0 +-1还没分开
if(j>1&&sum!=0)
{
//+放前面了 必须判断正负号
if (sum>0)
{
System.out.print("+");
if(sum==1)
System.out.print("x"+j);
if(sum!=1)
System.out.print(sum+"x"+j);
}
else
{
if(sum==-1)
System.out.print("-"+"x"+j);
else
System.out.print(sum+"x"+j);
}
}
if(j==0&&sum!=0)
{
if(sum>0)
System.out.print("+"+sum);
else
System.out.print(sum);
}
if(j==1&&sum!=0)
{
if(sum>0)
{
if(sum==1)
System.out.print("+"+"x");
else
System.out.print("+"+sum+"x");
}
else
{
if (sum!=-1)
System.out.print(sum+"x");
else
System.out.print("-"+"x");
}
}
}
}
}
}