【C語言】多項式加法(mooc第七週測試題)
阿新 • • 發佈:2018-12-09
這個小題目吧我折磨的夠嗆,,主要在於特殊情況考慮不周,測試用例老是通不過。。
小結:
做法:用一個數組來儲存多項式,用下標表示冪次數,陣列元素值表示對應係數
輸出特殊格式考慮:係數和冪次數為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 11View Code//讀入兩個多項式並相加 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 }