PATA1002

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};

原文地址:https://www.cnblogs.com/zjutJY/p/9413766.html