PAT甲级1009水题飘过

题目分析:简单的多项式的模拟乘法,你可以假设未知数为x,exp为x的指数,coe为x的系数,则很容易就把答案推算出来,注意答案是从指数的高往低输出,同时要注意的是这是多项式的乘法,虽然指数的范围只有0~1000,但是乘法结果的指数范围为0~2000,注意数组定义的范围,开小了会产生段错误(下标越界,访问了不该访问的内存)

 1 #include<iostream>
 2 using namespace std;
 3 
 4 struct Node{
 5     int exp;        //指数 
 6     double coe;        //系数 
 7 }k[2005], a[15], b[15];        //对于k数组来说下标即对应指数 所以exp对于k数组来说其实是多余的 
 8 
 9 //初始化结构体数组 
10 void init(){
11     for(int i = 1; i <= 10; i++){
12         a[i].exp = 0;
13         a[i].coe = 0;
14         b[i].exp = 0;
15         b[i].coe = 0;
16     } 
17     for(int i = 0; i <= 2000; i++){
18         k[i].exp = 0;
19         k[i].coe = 0;
20     }
21 }
22 
23 int main(){
24     int n1, n2;
25     while(scanf("%d", &n1) != EOF){
26         init();
27         for(int i = 1; i <= n1; i++){
28             scanf("%d%lf", &a[i].exp, &a[i].coe);
29         }
30         scanf("%d", &n2);
31         for(int i = 1; i <= n2; i++){
32             scanf("%d%lf", &b[i].exp, &b[i].coe);
33         }
34         for(int i = 1; i <= n1; i++){
35             for(int j = 1; j <= n2; j++){
36                 //对a数组中的每一位都与b数组的每一位相乘,将结果存储到k数组中
37                 //得到指数 
38                 int exp = a[i].exp + b[j].exp;
39                 //得到系数
40                 double coe = a[i].coe * b[j].coe;
41                 k[exp].coe += coe; 
42             }
43         }
44         //统计一遍有多少项是有意义的(系数不为0)
45         int num = 0;
46         for(int i = 2000; i >= 0; i--){
47             if(k[i].coe != 0) num++;
48         } 
49         printf("%d", num);
50         //从高位到低位输出都有的系数不为0的情况下的多项式的每一项
51         for(int i = 2000; i >= 0; i--){
52             if(k[i].coe != 0){
53                 printf(" %d %0.1lf", i, k[i].coe);
54             }
55         } 
56         printf("\n");
57     }
58     return 0;
59 } 

猜你喜欢

转载自www.cnblogs.com/findview/p/11646645.html