1. 程式人生 > >【C語言】多項式加法(mooc第七週測試題)

【C語言】多項式加法(mooc第七週測試題)

 

這個小題目吧我折磨的夠嗆,,主要在於特殊情況考慮不周,測試用例老是通不過。。

小結:

做法:用一個數組來儲存多項式,用下標表示冪次數,陣列元素值表示對應係數

輸出特殊格式考慮:係數和冪次數為0,1,-1的情況,負係數的對加號輸出的影響


 

題目內容:

一個多項式可以表達為x的各次冪與係數乘積的和,比如:

2x6+3x5+12x3+6x+20

現在,你的程式要讀入兩個多項式,然後輸出這兩個多項式的和,也就是把對應的冪上的係數相加然後輸出。

程式要處理的冪最大為100。

輸入格式:

總共要輸入兩個多項式,每個多項式的輸入格式如下:

每行輸入兩個數字,第一個表示冪次,第二個表示該冪次的係數,所有的係數都是整數。第一行一定是最高冪,最後一行一定是0次冪。

注意第一行和最後一行之間不一定按照冪次降低順序排列;如果某個冪次的係數為0,就不出現在輸入資料中了;0次冪的係數為0時還是會出現在輸入資料中。

 

輸出格式:

從最高冪開始依次降到0冪,如:

2x6+3x5+12x3-6x+20

注意其中的x是小寫字母x,而且所有的符號之間都沒有空格,如果某個冪的係數為0則不需要有那項。

 

輸入樣例:

6 2

5 3

3 12

1 6

0 20

6 2

5 3

2 12

1 6

0 20

 

輸出樣例:

4x6+6x5+12x3+12x2+12x+40

時間限制:500ms記憶體限制:32000kb

程式碼:

 1 #include <stdio.h>
 2 #include <math.h>
 3 
 4 int main() {
 5     
 6     int coeff[101]={0};
 7     int p,c; //power,coeff
 8     int cnt_coeff = 0; //相加後多項式非0係數的個數
 9     int flag = 0;
10     
11
//讀入兩個多項式並相加 12 for(int i=0;i<2;i++){ 13 p=0, c=0; 14 do{ 15 scanf("%d %d",&p,&c); 16 coeff[p] += c; 17 }while(p!=0); 18 } 19 20 //統計相加後多項式非0係數的個數 21 for(int i=100;i>-1;i--){ 22 if(coeff[i]!=0){ 23 cnt_coeff += 1; 24 } 25 } 26 // 輸出為0 27 if(cnt_coeff==0){ 28 printf("%d\n",cnt_coeff); 29 } 30 else{ 31 for(int i=100;i>-1;i--){ 32 //從第二項開始,正係數項前面列印+號 33 if(flag && coeff[i]>0){ 34 printf("+"); 35 } 36 //討論係數,冪次數為0,1,-1的輸出情況 37 if(i!=0){ 38 if(i==1){ 39 if(coeff[1]==1){ 40 printf("x"); 41 }else if(coeff[1]==-1){ 42 printf("-x"); 43 }else if(coeff[i]!=0){ 44 printf("%dx",coeff[i]); 45 } 46 }else{ 47 if( coeff[i]==1){ 48 printf("x%d",i); 49 }else if(coeff[i]==-1){ 50 printf("-x%d",i); 51 }else if(coeff[i]!=0){ 52 printf("%dx%d",coeff[i],i); 53 } 54 } 55 56 }else{ 57 if(coeff[0] != 0){ 58 printf("%d\n",coeff[0]); 59 } 60 if(coeff[0] == 0){ 61 printf("\n"); 62 } 63 } 64 //只要coeff[i]!=0,那麼輸出的項且被涵蓋在上述分支當中, 65 //因此迴圈第一次執行到這裡並滿足條件時第一項已經輸出 66 if(coeff[i]!=0){ 67 flag = 1; 68 } 69 } 70 } 71 72 73 return 0; 74 }
View Code