1 #include <stdio.h>
 2 #include <string.h>
 3 #define BN_END -127
 4 char in[1200];
 5 char lbn[510],rbn[510],ans[1200],out[1200];
 6 int s2b(char* b,const char* s){
 7     int i,j;
 8     int out=strlen(s);
 9     for(i=0,j=out-1;i<out;i++,j--){
10         b[i]=s[j]-'0';
11     }
12     b[i]=BN_END;
13     return out;
14 }
15 void b2s(char* s,char* b){
16     int i,j,end;
17     for(i=0;b[i]!=BN_END;i++);
18     end=i-1;
19     for(i=end;i>=1 && b[i]==0;i--);
20     end=i;
21     b[end+1]=BN_END;
22     for(i=0,j=end;i<=end;i++,j--){
23         s[i]=b[j]+'0';
24     }
25     s[end+1]='\0';
26 }
27 void binit(char* b,int len){
28     memset(b,0,len);
29     b[len]=BN_END;
30 }
31 void correct(char* b){
32     int i,tmp,tmp2;
33     for(i=0;b[i]!=BN_END;i++){
34         if(b[i]>=10){
35             b[i+1]+=(b[i]/10);
36             b[i]%=10;
37         }else if(b[i]<0){
38             tmp=-b[i];
39             if(tmp%10==0){
40                 tmp2=tmp/10;
41             }else{
42                 tmp2=tmp/10+1;
43             }
44             b[i+1]-=tmp2;
45             b[i]+=(tmp2*10);
46         }
47     }
48 }
49 int main(){
50     char *left,*right;
51     int llen,rlen,alen,anslen;
52     int i,j,k,count;
53     while(gets(in)){
54         strtok(in," ");
55         left=strtok(NULL," ");
56         right=strtok(NULL," ");
57         llen=s2b(lbn,left);
58         rlen=s2b(rbn,right);
59         alen=(llen>rlen)?(llen):(rlen);
60         switch(in[0]){
61             case '1':
62                 anslen=(llen>rlen)?(llen+1):(rlen+1);
63                 binit(ans,anslen);
64                 for(i=0,count=0;i<alen;i++){
65                     ans[i]=((i>=llen)? 0 : lbn[i])+
66                            ((i>=rlen)? 0 : rbn[i]);
67                 }
68                 correct(ans);
69                 break;
70             case '2': /* 因為順序不會顛倒,所以直接減 */
71                 anslen=(llen>rlen)?(llen):(rlen);
72                 binit(ans,anslen);
73                 for(i=0,count=0;i<alen;i++){
74                     ans[i]=((i>=llen)? 0 : lbn[i])-
75                            ((i>=rlen)? 0 : rbn[i]);
76                 }
77                 correct(ans);
78                 break;
79             case '3':
80                 anslen=llen+rlen;
81                 binit(ans,anslen);
82                 for(i=0;i<rlen;i++){
83                     for(j=0,k=i;j<llen;j++,k++){
84                         ans[k]+=(rbn[i]*lbn[j]);
85                     }
86                     correct(ans);
87                 }
88                 correct(ans);
89         }
90         b2s(out,ans);
91         puts(out);
92     }
93     return 0;
94 }