多项式乘法+四舍五入
解题算法:多项式除法
多项式除法介绍:多项式除法_百度百科 (baidu.com)
四舍五入方法:()保留n为小数,n=0,1,2,3,...)(f为浮点数)
1.只需要输出四舍五入后的值
(1)printf()函数会根据格式要求,自动对float类型小数进行四舍五入
例如:printf("%.1lf", f); //保留1位小数
printf("%.3lf", f); //保留3位小数2.需要计算四舍五入后的值
(1)round(f * pow(10, n)) // pow(10, n) //保留几位小数就先乘再除10的几次方
(2)f+0.5 //整数四舍五入 f+0.05 //保留以为小数四舍五入 .........
3.只需要判断四舍五入后的值
(1)if ( f >= 0.05 ) //保留一位小数后不为0
AC代码
(1)‘->’ 和 ‘.’的区别
点运算符( . )的左边操作数是一个结果为结构的表达式;
箭头运算符( -> )的左边的操作数是一个指向结构体的指针。
#include<iostream>
#include<math.h>
#include<map>
using namespace std;
int main()
{
int n, e,max;
double c;
map<int, double, greater<int> > A, B, C, Q, R; //按指数降序排序
cin >> n;
for (int i = 0; i < n; i++) {
cin >> e >> c;
A[e] = c;
}
cin >> n;
for (int i = 0; i < n; i++) {
cin >> e >> c;
B[e] = c;
}
while (A.begin()->first>= B.begin()->first) //计算
{
e = A.begin()->first - B.begin()->first; //商的指数
c = A.begin()->second / B.begin()->second; //商的系数
C[e] += c; //记录商
for (auto&it : B)
A[it.first + e] -= it.second*c;
A.erase(A.begin());
}
for (auto& it : A) //去除余数中的零项
// if (abs(it.second) >= 0.05)
if (abs(round(it.second * 10) / 10) >= 0.1)
R[it.first] = it.second;
for (auto& it : C) //去除商中的零项
// if (abs(it.second) + 0.05 >= 0.1)
if (abs(round(it.second * 10) / 10) >= 0.1)
Q[it.first] = it.second;
printf("%d", Q.size());
if (Q.size())
for (auto& it : Q)
printf(" %d %.1lf", it.first, it.second);
else printf(" 0 0.0");
printf("\n%d", R.size());
if (R.size())
for (auto& it : R)
printf(" %d %.1lf", it.first, it.second);
else printf(" 0 0.0");
return 0;
}