#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; char s[400000]; //存储输入 struct Big { int a[10000]; int x; }; //重载 + Big operator + (Big A,Big B) { int x=max(A.x,B.x); for(int i=1;i<=x;i++) { A.a[i]+=B.a[i]; A.a[i+1]+=A.a[i]/10; A.a[i]%=10; } return A; } //重载 - Big operator - (Big A,Big B) { int x=max(A.x,B.x); for(int i=1;i<=x;i++) { A.a[i]-=B.a[i]; if(A.a[i]<0) { A.a[i+1]-=1; A.a[i]+=10; } } return A; } bool operator < (Big A,Big B) //重载 < 用于 小数 - 大数 { if(A.x!=B.x) return A.x<B.x; for(int i=A.x;i>=1;i--) { if(A.a[i]!=B.a[i]) return A.a[i]<B.a[i]; } } //重载 * Big D; Big operator * (Big A,Big B) { Big C=D; for(int i=1;i<=6000;i++) C.a[i]=0; for(int i=1;i<=A.x;i++) for(int j=1;j<=B.x;j++) C.a[i+j-1]+=A.a[i]*B.a[j]; for(int i=1;i<=5000;i++) { C.a[i+1]+=C.a[i]/10; C.a[i]%=10; } return C; } // 输出函数 Big A,B,C; void out() { int h=0; for(int i=5000;i>0;i--) { int q=C.a[i]; if(q!=0&&h==0) h=1; if(h==1) cout<<q; if(i==1&&h==0) cout<<0; } cout<<endl; } int main() { scanf("%s",s); int x=strlen(s); for(int i=0;i<x;i++) //倒着存 A.a[x-i]=s[i]-'0'; A.x=x; scanf("%s",s); x=strlen(s); for(int i=0;i<x;i++) B.a[x-i]=s[i]-'0'; B.x=x; if(A<B) { C=B-A; cout<<"-"; out(); } else { C=A-B; out(); } C=A+B; out(); C=A*B; out(); return 0; }