EOJ_1023_一元多项式乘法

#include<bits/stdc++.h>using namespace std;int arr1[53]={0};int arr2[53]={0};int apart[53]={0};//将数组分离成系数和指数,指数作为数组下标,系数作为数组对应下标的值int res[53] = {0};//乘法的结果//指数相加,系数相乘void mulint arr1[], int arr2[], int len){ forint i=0;i<len;i++){ forint j=0;j<len;j++){ res[j+i] += arr1[i]*arr2[j]; //注意要用+= } }}void departstring s, int arr[]){ //分离多项式采用“大字符串抠小字符串”方法,即两级for循环 int len = s.size); int sign=1;//判断系数的正负 forint i=0;i<len+1;i++){ int coe=0;//系数coefficient int ex=0;//指数exponent int flagex=0;//因为是先计算coe,计算完coe后要有个flagex,知道下次计算ex forint j=i;j<len+1;j++){ ifs[j]==’+’ ||s[j]==’-‘ ||j==len){ //每满足三个条件的一个,代表一次小字符串的结束 ifs[j]==’-‘ && j==0) {sign=-1;continue;} //区别-x+1等数组第一个字符即为’-‘的情况 arr[ex] = coe*sign;//将分割出来的小字符串的系数指数存储下来 i=j;//小字符串的结束处下标赋给i,作为下一个小字符串的开始遍历下标 //记录下一个小字符串的系数正负,注意37、38行都要写,两个字符串系数没关联 ifs[j]==’+’) sign=1; ifs[j]==’-‘) sign=-1; break; } ifisdigits[j]) && !flagex) //为数字且应该计算coe时,注意-‘0’ coe = coe*10+s[j]-‘0′; else ifs[j]==’x’){ //当遇到’x’,系数计算结束 ifs[j+1]!=’^’)ex=1; ifcoe==0) coe=1; flagex=1; } ifisdigits[j]) && flagex){//为数字且计算ex时 ex = ex*10+s[j]-‘0’; } } }}//大字符串抠小字符串,直接存储coe,当遍历到x时,存储ex设置为0,int main){ string s1,s2; whilecin>>s1>>s2){ memsetarr1,0,sizeofint)*53); memsetarr2,0,sizeofint)*53); memsetres,0,sizeofint)*53); memsetapart,0,sizeofint)*53); departs1, arr1); departs2, arr2); mularr1, arr2, 52); forint i=52;i>=0;i–) ifres[i]) cout<<res[i]<<” “; cout<<endl; } return 0;}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注