7-9 一進制多項式的乘法與加法運算 (20 分)
設計函數分别求兩個一進制多項式的乘積與和。
輸入格式:
輸入分2行,每行分别先給出多項式非零項的個數,再以指數遞降方式輸入一個多項式非零項系數和指數(絕對值均為不超過1000的整數)。數字間以空格分隔。
輸出格式:
輸出分2行,分别以指數遞降方式輸出乘積多項式以及和多項式非零項的系數和指數。數字間以空格分隔,但結尾不能有多餘空格。零多項式應輸出0 0。
輸入樣例:
4 3 4 -5 2 6 1 -2 0
3 5 20 -7 4 3 1
輸出樣例:
15 24 -25 22 30 21 -10 20 -21 8 35 6 -33 5 14 4 -15 3 18 2 -6 1
5 20 -4 4 -5 2 9 1 -2 0
7-9 一進制多項式的乘法與加法運算 (20 分)
#include <stdio.h>
#include <stdlib.h>
#define N 10000
/*輸入分2行,每行分别先給出多項式非零項的個數,再以指數遞降方式輸入一個多項式非零項系數和指數
(絕對值均為不超過1000的整數)。數字間以空格分隔。
輸出分2行,分别以指數遞降方式輸出乘積多項式以及和多項式非零項的系數和指數。
數字間以空格分隔,但結尾不能有多餘空格。零多項式應輸出0 0。*/
int main()
{
int a[N] = {0};
int b[N] = {0};
int c[N] = {0}; //求積
int d[N] = {0}; //求和
int i ,j;
int x,z ; //系數 指數
int cnt=0;
scanf("%d",&i); //讀入第一個單項式
while( i-- ){
scanf("%d %d",&x,&z);
a[z] += x; //指數為z的系數放在z位置上
}
scanf("%d",&i); //讀入第二個單項式
while( i-- ){
scanf("%d %d",&x,&z);
b[z] += x;
}
//多項式乘法
for( i=N-1; i>=0; i--){
if( a[i] ){
for( j=0; j<N; j++){
if( b[j]){
c[ i+j ] += a[i]*b[j];
}
}
}
}
//輸出多項式乘法結果
for( i=N-1; i>=0; i--){
if( c[i] ){
if( cnt ){
//處理結尾不能有多餘空格
printf(" ");
}
printf("%d %d",c[i],i);
cnt++;
}
}
if( !cnt ){
printf("0 0");
}
printf("\n");
//多項式加法
for( i=N-1; i>=0; i--){
if( a[i]){
d[i] += a[i];
}
}
for( j=N-1; j>=0; j--){
if( b[j]){
d[j] += b[j];
}
}
//輸出多項式加法結果
cnt = 0;
for( i=N-1; i>=0; i--){
if( d[i] ){
if( cnt ){
printf(" ");
}
printf("%d %d",d[i],i);
cnt++;
}
}
if(!cnt){
printf("0 0");
}
return 0;
}