多项式加法



题目内容:

一个多项式可以表达为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

时间限制:500ms内存限制:32000kb

Java程序

---------------

importjava.util.Scanner;

publicclass Main {

   public static void main(String[] args) {

      Scanner in = new Scanner(System.in);

      int[] poly = new int[101];

      int k = 0, p = 0, max = 0;

      boolean first = true;

      //输入第一个多项式

      do {

         k = in.nextInt(); //数组下标表示幂次

         p = in.nextInt();

         poly[k] += p; //对应的数组元素值表示系数,幂次相等,系数相加

         if(k > max)

            max = k;  //最高幂次

      } while(k != 0);  //最后一行一定是0次幂

      //输入第二个多项式

      do {

         k = in.nextInt();

         p = in.nextInt();

         poly[k] += p;  //幂次相等,系数相加

         if(k > max)

            max=k;

      } while(k != 0);

      //从最高幂次开始依次降到1幂次

      for(k = max; k>0; --k) {

         if(poly[k] > 0) {//系数相加后,新的系数为正数 

            if(first ==true)  //第一项不用输出+

               first = false;

            else

               System.out.print("+");

            if(poly[k] !=1)  //系数为1不用输出

               System.out.print(poly[k]);

            System.out.print("x");

            if(k != 1)  //幂次为1不用输出

               System.out.print(k);

         }

         else if(poly[k] <0) {   //系数相加后,新的系数为负数

            first = false; //处理第一项

            if(poly[k] != -1)

               System.out.print(poly[k]);

            else

              System.out.print("-"); //系数为-1,输出-

            System.out.print("x");

            if(k != 1)

               System.out.print(k);

         }

      }     

      if(poly[0] >= 0) {   //处理0次幂

         if(first == true){    //只有常数项,常数项是0的话,也要输出0

            first = false;

            System.out.print(poly[0]);

         }

         else if(poly[0] != 0)    //有多项,常数项不为0,则输出,否则不输出

           System.out.print("+"+poly[0]);

      }

      else if(poly[0] < 0)

         System.out.print(poly[0]);

   }         

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值