多项式加法(模拟)
题目内容:一个多项式可以表达为x的各次幂与系数乘积的和,比如:2x6+3x5+12x3+6x+20;现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出。程序要处理的幂最大为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
解题思路:字符串处理,基础题,详解看注解。
AC代码:
1 import java.util.Scanner; 2 public class Main { 3 public static void main(String[] args) { 4 Scanner scan = new Scanner(System.in); 5 int[] Pow = new int[101];//Pow数组记录系数,下标是幂指数 6 int index,val,MaxIndex=-1;//先标记为-1,表示找不到 7 for(int i=1;i<=2;++i) {//遍历两次,输入两个多项式 8 while(true) { 9 index=scan.nextInt(); 10 val = scan.nextInt(); 11 Pow[index] += val; 12 if(index==0)break;//当输入幂指数是0,表示完成一个多项式的输入,跳出 13 } 14 } 15 for(int i=100;i>=0;--i){//找到第一个非0系数的幂指数 16 if(Pow[i]!=0){ 17 MaxIndex=i;//将第一个非0系数的幂指数给MaxIndex后跳出 18 break; 19 } 20 } 21 if(MaxIndex==-1){//表示整个多项式为0,直接输出0即可 22 System.out.println(0); 23 } 24 else if(MaxIndex==0){//如果0次幂系数不为0,说明非0次幂的系数都为0,直接输出0次幂的系数 25 System.out.println(Pow[MaxIndex]); 26 } 27 else{//先输出第一个非0次幂系数的项 28 if(Pow[MaxIndex]>1||Pow[MaxIndex]<-1)System.out.print(Pow[MaxIndex]+"x");//如果系数不是1或-1且不是0,直接输出第一项的系数和x 29 else if(Pow[MaxIndex]==1)System.out.print("x");//如果系数是1,输出x 30 else if(Pow[MaxIndex]==-1)System.out.print("-x");//如果系数是-1,输出-x 31 if(MaxIndex!=1)System.out.print(MaxIndex);//如果此时的幂指数不是1,接着就可以输出幂指数 32 for(int i=MaxIndex-1;i>0;--i){//处理除首尾外中间的部分,因为已经有第一项了,所以接下来遇到系数是正数,前面可以直接输出'+' 33 if(Pow[i]>1)System.out.print("+"+Pow[i]+"x");//当系数大于1时 34 else if(Pow[i]==1)System.out.print("+x");//当系数是1时,直接输出+x 35 else if(Pow[i]==-1)System.out.print("-x");//当系数是-1时,直接输出-x 36 else if(Pow[i]<-1)System.out.print(Pow[i]+"x");//当系数小于-1时 37 else continue;//这句话其实是多余的,为了呼应美hhh~,即系数为0时,直接跳过 38 if(Pow[i]!=0 && i>1)System.out.print(i); //如果系数不为0且幂指数不为1,才可以输出这个幂指数 39 }//最后处理尾巴即0次幂,这时候就不用管系数是不是1或-1,因为最后一项是不含x的,所以只需按照剩下的规则格式输出即可 40 if(Pow[0]>0)System.out.print("+"+Pow[0]); 41 if(Pow[0]<0)System.out.print(Pow[0]); 42 } 43 scan.close(); 44 } 45 }