题目分析:简单的多项式的模拟乘法,你可以假设未知数为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(" "); 57 } 58 return 0; 59 }