PAT---A1009. Product of Polynomials (25)

来源:互联网 发布:java跳转页面代码 编辑:程序博客网 时间:2024/06/05 16:18

Product of Polynomials (25)

This time, you are supposed to find A*B where A and B are two polynomials.

Input Specification:

Each input file contains one test case. Each case occupies 2 lines, and each line contains the information of a polynomial: K N1 aN1 N2 aN2 … NK aNK, where K is the number of nonzero terms in the polynomial, Ni and aNi (i=1, 2, …, K) are the exponents and coefficients, respectively. It is given that 1 <= K <= 10, 0 <= NK < … < N2 < N1 <=1000.

Output Specification:

For each test case you should output the product of A and B in one line, with the same format as the input. Notice that there must be NO extra space at the end of each line. Please be accurate up to 1 decimal place.

Sample Input
2 1 2.4 0 3.2
2 2 1.5 1 0.5
Sample Output
3 3 3.6 2 6.0 1 1.6

参考代码:

#include <iostream>#include <stdio.h>using namespace std;int main(){    int max_size = 1001;               //因为由题目可知,Ni可以取到1000,所以这里的最大值设为1001。a[1001]的最后一项是a[1000]    double array_a[max_size] = {0};    //用来存储第一次输入的数据,Y=array_a[X]表示的是指数为X的那一项的系数为Y    double array_b[max_size] = {0};    //用来存储第二次输入的数据    double array_c[max_size*2] = {0};  //用来存储a与b两个数组中元素两两相乘后的结果    int cin_a;                          //用来存储输入的项的个数,即K    int a;                              //暂存数据    double b;                          //暂存数据    int count_1 = 0;                    //用来记录结果中不为0的项的个数    cin >>cin_a;    while(cin_a--)                      //循环cin_a次    {        cin >>a>>b;        array_a[a]= b;                  //Y=array_a[X]表示的是指数为X的那一项的系数为Y    }    cin >>cin_a;                        //重新获取cin_a,可以重新定义变量,但这里为了节约内存,遂循环使用定义的变量    while(cin_a--)    {        cin>>a>>b;        array_b[a] = b;    }    for(int i=0;i<max_size;i++)        //把两个多项式中都不为0的项的系数两两相乘        for(int j=0;j<max_size;j++)            if((array_a[i]!=0)&&(array_b[j]!=0))              {                 array_c[i+j] += array_a[i] * array_b[j];            }    for(int i=0;i<max_size*2-1;i++)  //用count_1来记录相乘的结果中不为0的项的个数        if(array_c[i]!=0)            count_1++;    cout <<count_1;    for(int i=max_size*2-1;i>=0;i--)   //从最后一项开始进行检测和打印,因为越靠后,次数越大,题目要求按照次数从大到小打印        if(array_c[i]!=0)            printf(" %d %.1f",i,array_c[i]);  //将系数保留一位小数打印,因为c++实现较为麻烦,遂采用c语言实现    return 0;}
0 0
原创粉丝点击