数组:多项式加法

来源:互联网 发布:java 复制代码 编辑:程序博客网 时间:2024/06/05 04:08

一个多项式可以表达为x的各次幂与系数乘积的和,比如:

现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。

程序要处理的幂最大为100。


输入格式:

总共要输入两个多项式,每个多项式的输入格式如下:

每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数。第一行一定是最高幂,最后一行一定是0次幂。

注意第一行和最后一行之间不一定按照幂次降低顺序排列;如果某个幂次的系数为0,就不出现在输入数据中了;0次幂的系数为0时还是会出现在输入数据中。


输出格式:

从最高幂开始依次降到0幂,如:

  1. 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

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 count=0;
boolean choose=true;
int []one=new int [101];
int []two=new int[101];
int[]three=new int[101];
int a,b,i=0,j=0;
boolean mark = true;//用来标记第一个数据
do{
a=in.nextInt();//幂次,
b=in.nextInt();//系数
two[i++]=a;
one[a]+=b;//用幂次当做数组的下标,系数当做数组的值,,把下标相同的值相加。
if(a==0)
{
count++;//循环两次
}
}while(count==0);
do{
a=in.nextInt();//幂次,
b=in.nextInt();//系数
three[j++]=a;
one[a]+=b;//用幂次当做数组的下标,系数当做数组的值,,把下标相同的值相加。


if(a==0)
{
count++;//循环两次
}
}while(count==1);
for(int k=1;k<=i-1;k++)
{
if(!(two[0]>two[k]))//保证第一行输入的幂次最大
{
choose=false;
break;
}
}
for(int k=1;k<=j-1;k++)
{
if(!(three[0]>three[k]))//保证第一行输入的幂次最大
{
choose=false;
break;
}
}
if(choose)//
{
for(int z = 100;z>=0;z--)//输出相加后的多项式
       {
            
           if (one[z]!= 0)//输出系数不为0的项
           {
               if (z == 0)//幂次为0时
               {
                   if (one[z] > 0)
                   {               
                       
                   if (mark)
                       {
                           System.out.print(one[z]);//输出的第一项,不带+号
                       }
                       else
                       {
                           System.out.print("+"+one[z]);//如果不是输出的第一项要带+号
                    
                       } 
                   
                   }
                   else
                   {
                       System.out.print("-"+ Math.abs(one[z]));
                   }
               }
               else if (z == 1)//幂次为1时
               {
                   if (one[z] > 0)
                   {
                      if(one[z]==1)  //系数为1时,要输出x
                      {
                     if (mark)
                       {
                           System.out.print("x");
                       }
                       else
                       {
                           System.out.print("+"+"x");
                       }
                      }
                      else           //系数不为1时,输出时要带系数
                      {
                        if (mark)
                       {
                           System.out.print(one[z]+"x");
                       }
                       else
                       {
                           System.out.print("+"+one[z]+"x");
                       }
                   
                      }
                   
                   }
                   else
                   {
                       if(one[z]==-1)
                       {
                       System.out.print("-"+"x");
                       }
                       else
                       {
                       System.out.print("-"+ Math.abs(one[z])+"x");
                       }
                   
                   }
               }
               else
               {
                   if (one[z] > 0)
                   {
                      if(one[z]==1)
                      {
                     if (mark)
                       {
                           System.out.print("x"+z);
                       }
                       else
                       {
                           System.out.print("+"+"x"+z);
                       }
                      }
                      else
                      {
                     if (mark)
                       {
                           System.out.print(one[z]+"x"+z);
                       }
                     else
                       {
                           System.out.print("+"+one[z]+"x"+z);
                       }
                   
                      }
                   
                   }
                   else
                   {
                       if(one[z]==-1)
                       {
                       System.out.print("-"+"x"+z);  
                       }
                       else
                       {
                       System.out.print("-"+ Math.abs(one[z])+"x"+z);   
                       }
                   
                   }
               }
                  mark = false;
}
           else //输出幂次为0,系数也为0的和
           {
            if(z==0&&mark)
            System.out.print("0");//为第一个数时,输出0
           }
           
}


}
}
}

原创粉丝点击