多项式乘法+四舍五入

题目链接:题目详情 - 7-10 多项式A除以B (25 分) (pintia.cn)

 解题算法:多项式除法 

多项式除法介绍:多项式除法_百度百科 (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)‘->’ 和 ‘.’的区别

点运算符( . )的左边操作数是一个结果为结构的表达式

箭头运算符( -> )的左边的操作数是一个指向结构体的指针

参考:C 语言结构体之点运算符( . )和箭头运算符( -> )的区别_ShenYuanLuo的博客-CSDN博客

#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;
}


posted @ 2022-05-05 08:41  光風霽月  阅读(28)  评论(0编辑  收藏  举报