欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > L2-018 多项式A除以B

L2-018 多项式A除以B

2025/4/19 15:42:24 来源:https://blog.csdn.net/m0_74237658/article/details/147341855  浏览:    关键词:L2-018 多项式A除以B

比较难想的一道题,需要知道多项式除法的方法,具体解释在代码中

#include<bits/stdc++.h>
using namespace std;
//a,b分别存储a多项式和b多项式,c是最后的商,最后a剩下的就是余数 
double a[100010],b[100010],c[100010]; 
//舍去函数
double op(double x){bool flag = 0;if(x < 0) flag = 1;x = abs(x);int y = x * 100;if(y % 10 >= 5){y += 10;}if(flag == 1){return -(double)1.0*y/100;}return (double)1.0*y/100;
} int main(){int n,m;cin>>n;int indexa,indexb,indexc;indexa = indexb = -1;for(int i = 1 ; i <= n ; i++){int x,y;cin>>x>>y;a[x] = y;	//存储每个指数对应的系数indexa = max(indexa,x); } cin>>m;for(int i = 1 ; i <= m ; i++){int x,y;cin>>x>>y;b[x] = y;	//存储每个指数对应的系数indexb = max(indexb,x); } indexc = indexa - indexb;	//表示商的最高项while(indexa >= indexb){double k = a[indexa] / b[indexb];	//每次把最高项化为0,相当于执行a - b * k; c[indexa - indexb] = k;	//表示商的当前指数对应的系数 //还要操作a的其他项,也就是其他项也要减去对应b*k;for(int i = indexa,j = indexb ; i >= 0 && j >= 0 ; i--,j--){a[i] -= k * b[j];	//这一步不太好理解 ,具体请看下方 } /*这一步其实就是对a多项式进行一个更新,因为我们当前把最高项化为0,也就是说减去 b乘以k*x^n,所以我们就可以这样枚举去更新,比如8 67 56 4 */while(indexa >= 0 && fabs(a[indexa]) <= 1e-6){indexa--;}}int cnt1 = 0;	//判断c是不是0 for(int i = indexc ; i >= 0 ; i--){if( op(fabs(c[i])) >= 0.1){cnt1++;}} cout<<cnt1;if(cnt1 == 0) cout<<" 0 0.0";else{for(int i = indexc ; i >= 0 ; i--){if( op(fabs(c[i])) >= 0.1){printf(" %d %.1lf",i,c[i]);}} }cout<<endl;int cnt2 = 0;	//判断a是不是0 for(int i = indexa ; i >= 0 ; i--){if( op(fabs(a[i])) >= 0.1){cnt2++;}} cout<<cnt2;if(cnt2 == 0) cout<<" 0 0.0";else{for(int i = indexa ; i >= 0 ; i--){if( op(fabs(a[i])) >= 0.1){printf(" %d %.1lf",i,a[i]);}} }cout<<endl;return 0; 
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词