part1——高精度的逻辑处理及输入输出流
本文主要应用class封装高精度操作来对c++的class类加深理解
首先给出部分定义
class Big_Num
{private:
int sig,len,a[Maxn];
public:
friend istream& operator>>(istream&,Big_Num&);
friend ostream& operator<<(ostream&,Big_Num&);
bool operator>(const Big_Num &A)const;
bool operator>=(const Big_Num &A)const;
bool operator<(const Big_Num &A)const;
bool operator<=(const Big_Num &A)const;
bool operator==(const Big_Num &A)const;
};
输入输出流
istream& operator>>(istream &in,Big_Num &A)//输入
{char ch[Maxn];
in>>ch;
A.len=strlen(ch);
int end;
if(ch[0]=='-')
{A.sig=-1;
end=1;
while(end<A.len-1&&ch[end]=='0')end++;//前导零
for(int i=A.len-1;i>=end;i--) A.a[A.len-i]=ch[i]-'0';
}
else
{A.sig=1;
end=0;
while(end<A.len-1&&ch[end]=='0')end++;//前导零
for(int i=A.len-1;i>=end;i--) A.a[A.len-i]=ch[i]-'0';
}
A.len-=end;
if(A.len==1&&A.sig==-1&&A.a[1]==0)A.sig=0;
return in;
}
ostream& operator<<(ostream &out,Big_Num &A)//输出
{if(A.sig==-1)printf("-");
for(int i=A.len;i;i--)printf("%d",A.a[i]);
return out;
}
逻辑处理
bool Big_Num::operator>(const Big_Num &A)const
{if(sig!=A.sig)
{if(sig>A.sig)return 1;
return 0;
}
if(len>A.len)return 1;
if(len<A.len)return 0;
for(int i=len;i;i--)
if(a[i]>A.a[i])return 1;
else if(a[i]<A.a[i])return 0;
return 0;
}
bool Big_Num::operator>=(const Big_Num &A)const
{if(sig!=A.sig)
{if(sig>A.sig)return 1;
return 0;
}
if(len>A.len)return 1;
if(len<A.len)return 0;
for(int i=len;i;i--)
if(a[i]>A.a[i])return 1;
else if(a[i]<A.a[i])return 0;
return 1;
}
bool Big_Num::operator<(const Big_Num &A)const
{if(sig!=A.sig)
{if(sig>A.sig)return 0;
return 1;
}
if(len>A.len)return 0;
if(len<A.len)return 1;
for(int i=len;i;i--)
if(a[i]>A.a[i])return 0;
else if(a[i]<A.a[i])return 1;
return 0;
}
bool Big_Num::operator<=(const Big_Num &A)const
{if(sig!=A.sig)
{if(sig>A.sig)return 0;
return 1;
}
if(len>A.len)return 0;
if(len<A.len)return 1;
for(int i=len;i;i--)
if(a[i]>A.a[i])return 0;
else if(a[i]<A.a[i])return 1;
return 1;
}
bool Big_Num::operator==(const Big_Num &A)const
{if(sig!=A.sig)return 0;
if(len!=A.len)return 0;
for(int i=len;i;i--)if(a[i]!=A.a[i])return 0;
return 1;
}
本节完:) 后续见part2