1002 A+B for Polynomials (25)
Polynomials多项式,exponents指数,coefficients系数
输入:两行数据,每行表示一个多项式:第一个数字表示非零项的数目,后面每两个数表示一项,分别表示幂次和系数。
输出:两个多项式的和,格式与输入一样
思路一:
1.定义一个double类型的数组p[1111](长度大于1000),其中片[n]表示幂次为n的项的系数,初始化为0。定义一个int型的变量count表示非零项的个数,初始化为0;
2.先按输入格式读入第一个多项式,再读入第二个多项式,并将对应相同幂次项的系数直接加到第一个多项式上;
3.循环搜索p[]数组中值不为0的个数,赋值给count,作为第一个数字输出;再通过循环以此从高位到低位进行搜索数组中不为0值,将对应的位数和值分别按格式输出(printf("%d %.1f",i,p[i]))。
1 #include <stdio.h> 2 #include<string.h> 3 //输入:两行数据,每行表示一个多项式:第一个数字表示非零项的数目, 4 //后面每两个数表示一项,分别表示幂次和系数。 5 //输出:两个多项式的和,格式与输入一样 6 7 int main(){ 8 9 const int MAX_N=1111; 10 double a=0.0; 11 int k,n=0,count=0,i;//k:输入的非零项数,n:幂次,a:系数,count:和的非零项数 12 double p[1111]={0};//声明时使用{0}初始化为全0 13 //double p[MAX_N]; 14 //memset(p,0,MAX_N);//使用memset方法,注意要加string.h头文件 15 16 // for(i=MAX_N-1;i>=0;i--){ 17 // printf("%.1f",p[i]); 18 // } 19 20 //输入第一行数据 21 scanf("%d",&k); 22 for(i=0;i<k;i++){ 23 scanf("%d %lf",&n,&a); 24 p[n]+=a; 25 } 26 27 //输入第二行数据 28 scanf("%d",&k); 29 for(i=0;i<k;i++){ 30 scanf("%d %lf",&n,&a); 31 p[n]+=a; 32 } 33 34 for(i=0;i<MAX_N;i++){ 35 if(p[i]){ 36 count++; 37 } 38 } 39 40 printf("%d",count); 41 for(i=MAX_N-1;i>=0;i--){ 42 if(p[i]){ 43 printf(" "); 44 printf("%d %.1f",i,p[i]); 45 } 46 } 47 48 return 0; 49 }
碰到的报错:
const int MAX_N=1000;
double p[MAX_N]={0};
[Error] variable-sized object may not be initialized [错误]可变大小的对象不能初始化;
正确写法:double p[1000]={0};