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 }