两个多项式相加,从高幂到低幂依次输出。

/*思路:将两个多项式分别存入两个数组,然后将两个数组的对应项相加求和,将系数存入数组,而数组编号代表幂次,最后将得到的数组从高次到低次依次输出,
 * 要考虑的特殊情况有:
 * 幂次为1;系数为正或负1;只有常数项;首项及中间项如何表达*/

package duoxiangshi;

import java.util.Scanner;



public class Main {


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int num1[] = new int[101];
		int num2[] = new int[101];
		int num3[] = new int[101];
		int i=0,j=0,k;
		int cnt=0;
		int isMax=0;
		Scanner in = new Scanner(System.in);
		if(i<=100&&i>=0&&j<100&&j>=0)
		{


		do {
			 i = in.nextInt();
			 num1[i] = in.nextInt();


		}while( i != 0 );


		do {
			 j = in.nextInt();
			 num2[j] = in.nextInt();


			
		}while( j != 0 );




		//多项式求和后存入另一个数组num3[]
		for(i=0,k=0,j=0;i<101;i++,j++) {


			if(j==i)
			{


				num3[k]=num1[i]+num2[j];


				k++;
			}
		}


		for(k=100;k>0;k--)
		{
			if(num3[k]!=0) 
			{
				cnt=k;  //找到最高幂
			
				break;
			}
		}
		
		for(k=100;k>0;k--)//从最高幂100到幂为1,从中检索输出。
		{
			 if(num3[k] != 0) //系数不为零是前提
			{
				if(k == cnt)   //输出多项式的最高幂,即首个多项式。
				{


					if(num3[k]==1)
					{
						
						if(k==1)
						{
							System.out.print("x");//首个项系数为1,幂为1.
						}
						else 
						{
							System.out.print("x"+k);//首个项系数为1而幂不为1.
						}
					}
					else if(num3[k]==-1)
					{
						if(k==1)
						{
							System.out.print("-x");//首项系数为-1,而幂为1.
						}
						else 
						{
							System.out.print("-x"+k);//首项系数为-1,而幂不为1.
						}
					}
					else if(k==1&&num3[k]!=1&&num3[k]!=-1)//首项幂为1而系数不为1也不为-1的情况。
					{
						System.out.print(num3[k]+"x");
					}


					else 
					{
						System.out.print(num3[k]+"x"+k);//首项幂不为1,而系数既不为1也不为-1的情况。
					}
				}
				
				if(num3[k]<0&&k!=cnt)//非首项,当系数为负的情况。
				{
					 if(num3[k]==-1)
						{
							if(k==1)
							{
								System.out.print("-x");//系数为-1,而幂为1的情况。
							}
							else 
							{
							    System.out.print("-x"+k);//系数为-1,而幂不为1的情况。
							}
						}
					 else if(k==1&&num3[k]!=-1)
						{
							System.out.print(num3[k]+"x");//幂为1,而系数不为-1的情况。
						}
					else 
						{
							System.out.print(num3[k]+"x"+k);//幂不为1,而系数也不为-1的情况。
						}


					}
				else if(num3[k]>0&&k!=cnt)//非首项,当系数为正的情况。
				{
					if(num3[k]==1)
					{
					
						if(k==1)
						{
							System.out.print("+"+"x");
						}
						else 
						{
							System.out.print("+"+"x"+k);
						}
					}


					else if(k==1&&num3[k]!=1)
					{
						System.out.print("+"+num3[k]+"x");
					}
					else 	
					{
						System.out.print("+"+num3[k]+"x"+k);
					}
				}
			
			}
		
		}
		for(k=1;k<num3.length;k++)//检查非零次幂的系数,若存在非零次幂的多项式,另isMax==1.
			{
				if(num3[k]!=0)
				{
					isMax=1;
					break;
				}
				
			}
		
		      if (isMax==1){                 //前有非零次幂的情况下的零次幂项的输出。
								if(num3[0]>0){
									System.out.println("+"+num3[0]);
								}
								else if(num3[0]<0){
									System.out.println(num3[0]);
								}
								else if(num3[0]==0){
									System.out.println("");
								}
				     		}				
		   else if(isMax==0){			
							    System.out.println(num3[0]);	//仅仅有零次幂的情况下的输出					
					    	}
			}
		
	}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值