高精度
以前一直偷懒用的封装好的或者py。。。
现在依旧很懒Orz
有高精加,高精减,高精乘低精,高精除低精,比大小,输入输出
struct Big{
int s[10005];int len;
Big(){memset(s,0,sizeof s);len=0;}
void input() {
scanf("%s",tp);
len=strlen(tp);
for(int i=0;i<len/2;i++) swap(tp[i],tp[len-i-1]);
for(int i=0;i<len;i++) s[i]=tp[i]-'0';
}
Big operator - (const Big &rhs) const {
Big ans;
ans.len=max(len,rhs.len);
int jian=0,cnt=0;
for(int i=0;i<ans.len;i++) {
ans.s[i]=s[i]-rhs.s[i]-jian;
while(ans.s[i]<0) ans.s[i]+=10,cnt++;
jian=cnt;
cnt=0;
}
while(ans.s[ans.len-1]==0&&ans.len) ans.len--;
return ans;
}
bool operator < (const Big &rhs) const {
if(len>rhs.len) return 0;
else if(len<rhs.len) return 1;
for(int i=len-1;~i;i--) if(s[i]<rhs.s[i])return 1;
else if(s[i]>rhs.s[i]) return 0;
return 0;
}
void print() {
for(int i=len-1;~i;i--) printf("%d",s[i]);
putchar(' ');
}
Big operator / (const int &rhs) const {
Big ans;
int tui=0;
ans.len=len;
for(int i=len-1;~i;i--) {
ans.s[i]=s[i]+tui;
tui=(ans.s[i]%rhs)*10;
ans.s[i]/=rhs;
}
while(ans.s[ans.len-1]==0&&ans.len>1) ans.len--;
return ans;
}
Big operator * (const int &rhs) const{
int jin=0;
Big ans;
ans.len=len;
for(int i=0;i<len;i++) {
ans.s[i]=s[i]*rhs;
ans.s[i]+=jin;
jin=(ans.s[i]/10);
ans.s[i]%=10;
}
while(jin) ans.s[ans.len++]=jin%10,jin/=10;
return ans;
}
bool operator != (const Big &rhs) const {
if(len!=rhs.len) return 1;
for(int i=0;i<len;i++) if(s[i]!=rhs.s[i]) return 1;
return 0;
}
};
我是咸鱼。转载博客请征得博主同意Orz