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

 

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

小結:

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

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


 

題目內容:spa

一個多項式能夠表達爲x的各次冪與係數乘積的和,好比:code

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

如今,你的程序要讀入兩個多項式,而後輸出這兩個多項式的和,也就是把對應的冪上的係數相加而後輸出。內存

程序要處理的冪最大爲100。it

輸入格式:io

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

每行輸入兩個數字,第一個表示冪次,第二個表示該冪次的係數,全部的係數都是整數。第一行必定是最高冪,最後一行必定是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
相關文章
相關標籤/搜索