【PAT随笔】——多项式加法

代码实现:
1 #include <stdio.h> 2 // 项 的结构体 3 struct Item{ 4 int pwoer; 5 int coefficient; 6 }a[100]={0,0},b[100]={0,0},c[100]={0,0}; 7 //找出最大值序号 8 int Max(struct Item _array[],int index){ 9 int maxid=0; 10 11 for(int i=1;i<index+1;i++){ 12 if(_array[maxid].pwoer<_array[i].pwoer){ 13 maxid=i; 14 }; 15 }; 16 17 return maxid; 18 } 19 20 int main(int argc, char **argv) { 21 22 int len_a=sizeof(a)/sizeof(a[0]); 23 int len_b=sizeof(b)/sizeof(b[0]); 24 int index_a,index_b,index_c; 25 //数据导入 a[] 26 for(int i=0;i<len_a;i++){ 27 scanf("%d %d",&a[i].pwoer,&a[i].coefficient); 28 if(a[i].coefficient==0){ 29 a[i].pwoer=0; 30 a[i].coefficient==0; 31 i--; 32 continue; 33 }; 34 if(a[i].pwoer==0){ 35 a[i+1]=a[i]; 36 a[i]=a[0]; 37 a[0]=a[i+1]; 38 index_a=i; 39 break; 40 }; 41 }; 42 //数据导入 b[] 43 for(int i=0;i<len_b;i++){ 44 scanf("%d %d",&b[i].pwoer,&b[i].coefficient); 45 if(b[i].coefficient==0){ 46 b[i].pwoer=0; 47 b[i].coefficient==0; 48 i--; 49 continue; 50 }; 51 if(b[i].pwoer==0){ 52 b[i+1]=b[i]; 53 b[i]=b[0]; 54 b[0]=b[i+1]; 55 index_b=i; 56 break; 57 }; 58 }; 59 //将输入的数值进行升序排序 60 for(int i=index_a;i>-1;i--){ 61 int maxid=Max(a,i); 62 a[index_a+1]=a[i]; 63 a[i]=a[maxid]; 64 a[maxid]=a[index_a+1]; 65 }; 66 //合并数组中相同系数的项 67 68 for(int i=0;i<index_a;i++){ 69 if(a[i].pwoer==-1){ 70 continue; 71 }; 72 for(int j=i+1;j<index_a;j++){ 73 if(a[i].pwoer==a[j].pwoer){ 74 a[i].coefficient+=a[j].coefficient; 75 a[j].pwoer=-1; 76 }; 77 }; 78 }; 79 for(int i=1;i<=index_a;i++){ 80 while(a[i].pwoer==-1){ 81 a[i]=a[i+1]; 82 }; 83 if(a[i].coefficient==0){ 84 index_a=i-1; 85 break; 86 }; 87 }; 88 89 for(int i=index_b;i>-1;i--){ 90 int maxid=Max(b,i); 91 b[index_b+1]=b[i]; 92 b[i]=b[maxid]; 93 b[maxid]=b[index_b+1]; 94 }; 95 //合并数组中相同系数的项 96 { 97 for(int i=0;i<index_b;i++){ 98 if(b[i].pwoer==-1){ 99 continue; 100 }; 101 for(int j=i+1;j<index_b;j++){ 102 if(b[i].pwoer==b[j].pwoer){ 103 b[i].coefficient+=b[j].coefficient; 104 b[j].pwoer=-1; 105 }; 106 }; 107 }; 108 for(int i=1;i<=index_b;i++){ 109 while(a[i].pwoer==-1){ 110 b[i]=b[i+1]; 111 }; 112 if(b[i].coefficient==0){ 113 index_b=i-1; 114 break; 115 }; 116 }; 117 } 118 119 //将a[] b[]合并到C[](无序)同项合并 120 { 121 for(int i=0;i<=index_a;i++){ 122 123 c[i]=a[i]; 124 for(int j=0;j<=index_b;j++){ 125 if(b[i].pwoer==-1){ 126 continue; 127 }; 128 while(a[i].pwoer==b[j].pwoer){ 129 c[i].pwoer=a[i].pwoer; 130 c[i].coefficient+=b[j].coefficient; 131 b[j].pwoer=-1; 132 }; 133 }; 134 }; 135 index_c=index_a; 136 for(int i=0;i<=index_b;i++){ 137 if(b[i].pwoer!=-1){ 138 index_c+=1; 139 c[index_c]=b[i]; 140 }; 141 }; 142 } 143 144 //将c[]升序排列 145 for(int i=index_c;i>-1;i--){ 146 int maxid=Max(c,i); 147 c[index_c+1]=c[i]; 148 c[i]=c[maxid]; 149 c[maxid]=c[index_c+1]; 150 }; 151 152 for(int i=index_c;i>-1;i--){ 153 if(i>0){ 154 if(c[i].pwoer==1){ 155 printf("%dx + ",c[i].coefficient); 156 } 157 else{ 158 printf("%dx^%d + ",c[i].coefficient,c[i].pwoer); 159 }; 160 161 }else{ 162 printf("%d",c[i].coefficient); 163 }; 164 }; 165 166 printf("\n"); 167 168 return 0; 169 }
浙公网安备 33010602011771号