除法还没写( ̄▽ ̄)
重载写在结构体里,包含 < , != , h+h , h-h (绝对值)
this指针指本结构体的值
#include <iostream> #include <algorithm> #include <cstdio> #include <cmath> #include <cstring> #include <set> #define ll long long using namespace std; const int MX=10010; char s[MX*2]; struct High { int num[MX*2],len; void read() { scanf("%s",&s); len=strlen(s); for (int i=1;i<=len;i++) num[len-i+1]=s[i-1]-'0'; } bool operator <(const High y) const { int yl=y.len; if (len!=yl) return len<yl; for (int i=len;i>=1;i--) if (num[i]!=y.num[i]) return num[i]<y.num[i]; return false; } bool operator !=(const High y) const { if (len!=y.len) return 1; for (int i=1;i<=len;i++) if (num[i]!=y.num[i]) return 1; return 0; } High operator + (const High y) const { High z; z.len=max(len,y.len)+2; for (int i=1;i<=z.len;i++) { z.num[i]=num[i]+y.num[i]; z.num[i+1]+=z.num[i]/10; z.num[i]%=10; } for (;z.num[z.len]==0&&z.len>0;z.len--); return z; } High operator - (const High y) const { High z; if (*this<y) return y-(*this); z.len=len; for (int i=1;i<=len;i++) { z.num[i]+=num[i]-y.num[i]; if (z.num[i]<0) z.num[i]+=10,z.num[i+1]--; } for (;z.num[z.len]==0&&z.len>0;z.len--); return z; } High operator * (const High y) { High z; z.len=len+y.len+2; for (int j=1;j<=y.len;j++) for (int i=1;i<=len;i++) { z.num[i+j-1]+=num[i]*y.num[j]; z.num[i+j]+=z.num[i+j-1]/10; z.num[i+j-1]%=10; } for (;z.num[z.len]==0&&z.len>0;z.len--); return z; } void print() { if (len==0) printf("0"); else for (int i=len;i>=1;i--) printf("%d",num[i]); printf("\n"); } }a,b,c; int main() { a.read();b.read(); //c=a+b; //c.print(); //c=a-b; //c.print(); c=a*b; c.print(); }