【模拟】FZU 2115 多项式积分

 

 Problem 2115 多项式积分

Accept: 149    Submit: 717
Time Limit: 1000 mSec    Memory Limit : 32768 KB

 

 Problem Description

给定一个关于x(小写字母)的多项式,求其关于x的一阶积分,结果按降幂输出,要求结果为最简多项式。输出的多项式符合一般书写规则,即有如下特性:

多项式由单项式相加或相减组成,单项式可以表示成ax^b的形式,其中a、b均为整数,b为大于等于0的整数,a不能为0,特别的,当b等于1时,省略”^1”,写做ax,当b等于0时,写作a,而当a的值为±1时,1必须省略。多项式首项的不允许有“+”。

 Input

输入第一行为数据组数T。

每组数据第一行是多项式项数n(1<=n<=10),

第二行n个数表示系数,系数均为绝对值小于1000的整数,至少有1个系数不为0。

第三行n个数表示对应系数下x的指数,数据保证指数两两不等,题中给定的指数均为小于1000的非负整数。

 Output

输出也只有一行,为积分后的最简多项式,系数如果是分数写成最简分数形式。

 Sample Input

2315 2 -22 1 0123

 Sample Output

5x^3+x^2-2x1/2x^4

 

 

注意输出细节

 


#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;

struct node{
	int a[2],b;
}num[20];

int gcd(int a,int b){  
    return b?gcd(b,a%b):a;  
}  


bool cmp(node x,node y){
	return x.b>y.b;
}

int main(){
	int T;
	cin>>T;
	int n;
	int i,j;
	while(T--){
		cin>>n;
		
		for(i=0;i<n;++i){
			cin>>num[i].a[0];
		}
		for(i=0;i<n;++i){
			cin>>num[i].b;
			num[i].b++;
		}

		sort(num,num+n,cmp);
		int flag=1;
		for(i=0;i<n;++i){

			num[i].a[1]=num[i].b;

			if(num[i].a[0]==0)
				continue;
			if(num[i].a[0]>0){
				if(!flag)
					cout<<"+";
			}
			if(num[i].a[0]<0){
				cout<<"-";
				num[i].a[0]=-num[i].a[0];
			}
			
			
			int temp=gcd(num[i].a[0],num[i].a[1]);			
			num[i].a[0]=num[i].a[0]/temp;
			num[i].a[1]=num[i].a[1]/temp;
			if(num[i].a[0]>1||num[i].a[1]>1)
            {
                cout<<num[i].a[0];
			}
            if(num[i].a[1]>1){
					cout<<"/"<<num[i].a[1];
            }
			cout<<"x";
			if(num[i].b>1)
				cout<<"^"<<num[i].b;
			flag=0;
		}
		cout<<"\n";
	}
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值