超 短 高精度 bign 模板
终于会了,233
#include<iostream> #include<cstdio> #include<cstring> using namespace std; struct bign { int len; int num[1501]; bool flag; bign(){len=1;flag=0;memset(num,0,sizeof num);} bign(int x) { if(!x)return; len=0; while(x) { num[++len]=x%10;x/=10; } } }; bool operator < (bign a,bign b){ if(a.len<b.len)return 1; if(a.len>b.len)return 0; for(int i=a.len;i>=1;i--)if(a.num[i]>b.num[i])return 0; return 1; } bool operator == (bign a,bign b){ if(a.len!=b.len)return 0; for(int i=1;i<=a.len;i++)if(a.num[i]!=b.num[i])return 0; return 1; } bign operator + (bign a,bign b){ bign ans; int i=1,x=0; while(i<=a.len || i<=b.len){ ans.num[i]+=x;ans.num[i]+=(a.num[i]+b.num[i]); x=ans.num[i]/10;ans.num[i]%=10; i++; } ans.num[i]=x; if(!ans.num[i])i--; ans.len=i; return ans; } bign operator * (bign a,bign b){ bign ans; int len=a.len+b.len; for(int i=1;i<=a.len;i++){ int x=0; for(int j=1;j<=b.len;j++){ ans.num[i+j-1]+=(a.num[i]*b.num[j]+x); x=ans.num[i+j-1]/10; ans.num[i+j-1]%=10; } ans.num[i+b.len]+=x; } while(!ans.num[len] && len>1)len--; ans.len=len; return ans; } bign operator - (bign a,bign b){ bign ans; if(a==b)return ans; if(b<a){ for(int i=1;i<=a.len;i++){ if(a.num[i]<0)a.num[i]+=10,a.num[i+1]--; ans.num[i]=a.num[i]-b.num[i]; if(ans.num[i]<0){ ans.num[i]+=10; a.num[i+1]--;//向a的高位借位 } } } else{ ans.flag=1;// this number(I mean the ans) is smaller than zero for(int i=1;i<=b.len;i++){ if(b.num[i]<0){ b.num[i]+=10; b.num[i+1]--; } ans.num[i]=b.num[i]-a.num[i]; if(ans.num[i]<0){ ans.num[i]+=10; b.num[i+1]--; } } } int len=max(a.len,b.len); while(ans.num[len]<=0 && len>1)len--; ans.len=len; return ans; } bign get() { bign ans; string s; cin>>s; int l=s.length(); ans.len=l; if(s[0]=='-') { ans.flag=1; for(int i=1;i<ans.len;i++)ans.num[ans.len-i]=s[i]-48; } else { for(int i=0;i<ans.len;i++)ans.num[ans.len-i]=s[i]-48; } return ans; } void out(bign x) { if(x.flag) { cout<<"-"; for(int i=x.len-1;i>=1;i--) { cout<<x.num[i]; } } else for(int i=x.len;i>=1;i--) { cout<<x.num[i]; } } int main() { bign x=get(); out(x); return 0; }