pat,
本题的大概意思是多项式乘法,利用两个数组循环相互乘就可以了。
解题心得:
1、在比较浮点数时候,不要直接“!=0“之类的,fabs来与小数比较如1e-6!!,
虽然可能这样比,例子可能是正确的,但还是有bug!!
代码如下:
#include"stdio.h"
#include"string.h"
#include"math.h"
#include<iostream>
#include<vector>
#include<queue>
#include<string>
#include<algorithm>
using namespace std;
#define INF 0x7FFFFFFF
struct expression{
float coefficients;
int exponents;
};
vector<struct expression> expression1,expression2;
int main(){
int num;
while(scanf("%d",&num) != EOF){
int sum = 0;
vector<float> result;
result.resize(2010);
result.assign(2010,0.0);
expression1.resize(num);
for(int i = 0;i < num;i++){
scanf("%d %f",&expression1[i].exponents,&expression1[i].coefficients);
}
int num2;
scanf("%d",&num2);
expression2.resize(num2);
for(int i = 0;i < num2;i++){
scanf("%d %f",&expression2[i].exponents,&expression2[i].coefficients);
}
for(int i = 0;i < num;i++){
for(int j = 0;j < num2;j++){
int tempExponents = expression1[i].exponents + expression2[j].exponents;
float tempCoefficients = expression1[i].coefficients * expression2[j].coefficients;
result[tempExponents] += tempCoefficients;
}
}
for(int i = 0;i < 2010;i++){
if(fabs(result[i]) > 1e-6){
sum++;
}
}
printf("%d",sum);
for(int i = 2009;i >=0;i--){
if(fabs(result[i]) > 1e-6){
printf(" %d %.1f",i,result[i]);
}
}
}
return 0;
}