轩灵博客 - 学习新技能，提升自我从这里开始 - 编程
type: channel
link: https://blog.wenfxl.com/tag/%E7%BC%96%E7%A8%8B/
items: C语言 多项式加法

C语言 多项式加法
type: item
date: 2019-01-30T10:50:00+08:00
description: 题目内容：一个多项式可以表达为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博主写出的参考代码#include <stdio.h> int a[105],b[105]; int main(){ int x,y; while (~scanf("%d%d",&x,&y)){ a[x]=y; if (x==0) break; } while (~scanf("%d%d",&x,&y)){ b[x]=y; if (x==0) break; } for (int i=0;i<=100;i++) a[i]=a[i]+b[i]; int flag=0; for (int i=100;i>1;i--){ if (a[i]){ if (a[i]>0){ if (a[i]==1){ if (flag==0){ printf("x%d",i); flag=1; } else printf("+x%d",i); } else{ if (flag==0){ printf("%dx%d",a[i],i); flag=1; } else printf("+%dx%d",a[i],i); } } else{ if (a[i]==-1) printf("-x%d",i); else printf("%dx%d",a[i],i); } } } if (a[1]){ if (a[1]>0){ if (a[1]==1){ if (flag==0){ printf("x"); flag=1; } else printf("+x"); } else{ if (flag==0){ printf("%dx",a[1]); flag=1; } else printf("+%dx",a[1]); } } else{ if (a[1]==-1) printf("-x"); else printf("%dx",a[1]); } } if (a[0]>0){ if (flag==0){ printf("%d",a[0]); flag=1; } else printf("+%d",a[0]); } if (a[0]<=0){ printf("%d",a[0]); } printf("\n"); return 0; }