原題連結:
https://pintia.cn/problem-sets/994805342720868352/problems/994805509540921344
解答:
- #include<cstdio>
- using namespace std;
- struct Node
- {
- int exponent;
- double coff;
- };
- int main()
- {
- int num1,num2;
- scanf("%d",&num1);
- struct Node poly1[num1];
- double result[2001]={0.0};
- for(int i=0;i<num1;i++)
- {
- scanf("%d %lf",&poly1[i].exponent,&poly1[i].coff);
- }
- scanf("%d",&num2);
- struct Node poly2[num2];
- for(int i=0;i<num2;i++)
- {
- scanf("%d %lf",&poly2[i].exponent,&poly2[i].coff);
- }
- for(int i=0;i<num1;i++)
- {
- for(int j=0;j<num2;j++)
- {
- result[poly1[i].exponent+poly2[j].exponent] += poly1[i].coff*poly2[j].coff;
- }
- }
- int count=0;
- for(int i=0;i<2001;i++)
- {
- if(result[i]!=0)
- {
- count++;
- }
- }
- printf("%d",count);
- for(int i=2000;i>=0;i--)
- {
- if(result[i] !=0)
- {
- printf(" %d %.1lf",i,result[i]);
- }
- }
- return 0;
- }
思路:這一道題目思路很簡單,就是我們數學的多項式乘法整體思路是:首先定義結構體來存儲多項式結構,然後就是一個雙重循環進行乘法的運算,此處有一個小技巧,就是将數組的index預設為多項式的exponent,是以有了31行的寫法,非常簡單
另外需要注意的是:要求有我們的最大的exponent為那麼乘積的結果最大為2000,是以定義數組的時候,定義大小為2001(血淚史),邊界需要極其注意!!!畢竟PAT需要自己想邊界條件.