這仍然是一道關於a/b的題,只不過a和b都換成了多項式。你需要計算兩個多項式相除的商q和餘r,其中r的階數必須小於b的階數。
輸入分兩行,每行給出乙個非零多項式,先給出a,再給出b。每行的格式如下:
n e[1] c[1] ... e[n] c[n]
其中n
是該多項式非零項的個數,e[i]
是第i
個非零項的指數,c[i]
是第i
個非零項的係數。各項按照指數遞減的順序給出,保證所有指數是各不相同的非負整數,所有係數是非零整數,所有整數在整型範圍內。
分兩行先後輸出商和餘,輸出格式與輸入格式相同,輸出的係數保留小數點後1位。同行數字間以1個空格分隔,行首尾不得有多餘空格。注意:零多項式是乙個特殊多項式,對應輸出為0 0 0.0
。但非零多項式不能輸出零係數(包括捨入後為0.0)的項。在樣例中,餘多項式其實有常數項-1/27
,但因其捨入後為0.0,故不輸出。
4 4 1 2 -3 1 -1 0 -1
3 2 3 1 -2 0 1
3 2 0.3 1 0.2 0 -1.0
1 1 -3.1
因為輸入格式中保證所有指數是各不相同的非負整數,然後又說輸出格式與輸入格式相同,就說明不會出現如:x^2 / x^3 這樣的情況,因為這樣輸出的指數為負數了。
然後多項式相除,也就是長除,可以使用豎式進行演算,如對題給樣例進行豎式除法演示,演示如下圖所示:
**如下
#include #include #include using namespace std;
const int maxn = 1e6 + 10;
int b[maxn]; //b用來儲存除數各個項的指數
double a[maxn], c[maxn], d[maxn]; //a[i]=x表示被除數指數為i的項的係數為x,後面還可以用來表示除完後的餘
//c用來儲存除數各個項的係數 d[i]=x表示 商中指數為i的項 並且係數為x
int main()
cin >> m;
for(int i = 0; i < m; i++) cin >> b[i] >> c[i];
int exp_temp;
for(int i = limit; i >= b[0]; i--)
/*分別統計係數不為0的商和餘的項的個數*/
for(int i = limit; i >= 0; i--)
cout << cnt1;
for(int i = limit; i >= 0; i--)
if (cnt1==0) printf(" 0 0.0");
cout << endl;
cout << cnt2;
for(int i = limit; i >= 0; i--)
if (cnt2==0) printf(" 0 0.0");
return 0;
}
pta l2 18(多項式A除以B)
題意 給定兩個多項式,求出其做除法運算的商和餘數。思路 記下除數 被除數的最大指數,按照多項式除法的演算法模擬即可,要注意的是這裡的捨入操作是四捨五入,而不是向下取整,還有浮點運算存在誤差,比如對浮點數f進行判零操作應該 abs f 0.0000001,因為你初始化f 0,在計算機中實際可能存的是0...
7 10 多項式A除以B(25 分)
7 10 多項式a除以b 25 分 這仍然是一道關於a b的題,只不過a和b都換成了多項式。你需要計算兩個多項式相除的商q和餘r,其中r的階數必須小於b的階數。輸入分兩行,每行給出乙個非零多項式,先給出a,再給出b。每行的格式如下 n e 1 c 1 e n c n 其中n是該多項式非零項的個數,e...
再次模擬 多項式輸出
題目描述 一元 n 次多項式可用如下的表示式表示 f x an x n an 1 x n 1 a1 x a0,an 0 其中,ai a x 稱為i次項,ai稱為i次項的係數。給出乙個一元多項式各項的次數和係數,請按照如下規定的格式要求輸出該多項式 多項式中自變數為x,從左到右按照次數遞減順序給出多項...