#include #include #define SIZE 100000 #define BASE 10 typedef enum boolean { FALSE, TRUE } Boolean; void initial(); void write(); void sort(); void reverse(); void add(); int a[SIZE+1], b[SIZE+1]; int d[BASE+1], p[BASE+1]; int i,n,m,c; void main() { initial(); write(); while (TRUE) { reverse(); add(); sort(); write(); } } void initial() { int i,j,k,x,y,c; for(i=1;i<=SIZE;i++) a[i]=0; printf("Input number in subscript form d_1 p_1 ... d_m p_m\n"); printf("terminated by 0 0 \n"); k=0; scanf("%d %d",&x,&y); while ( x != 0 ) { d[k+1] = x; p[k+1] = y; k++; scanf("%d %d",&x,&y); } n=0; for(i=1;i<=k;i++) { for(j=1;j<=p[i];j++) b[n+j]=d[i]; n=n+p[i]; } for(i=1;i<=n;i++) a[i]=b[n+1-i]; } void sort() { int i,j; int num[BASE+1]; for(i=0;i<=BASE-1;i++) num[i]=0; for(i=1;i<=n;i++) num[a[i]]=num[a[i]]+1; j=1; for(i=BASE-1;i>=0;i--) { while (num[i]>0) { a[j]=i; num[i]=num[i]-1; j=j+1; } } while (a[n]==0) n=n-1; } void reverse() { int i; for(i=1;i<=SIZE; i++) b[i]=0; for(i=1;i<=n;i++) b[i]=a[n+1-i]; } void add() { int c,i,t; c=0; for(i=1;i<=n+1;i++) { t=a[i]+b[i]+c; a[i]=t % BASE; c=t/BASE; } if(a[n+1]!=0) { n=n+1; m=n; } } void write() { int i,c,num; printf("%d ",n); num=a[n]; printf("%d^",num); c=1; for(i=n-1;i>=1;i--) if(a[i]==num) c++; else { printf("%d %d^",c,a[i]); num=a[i]; c=1; } printf("%d\n",c); }