📄 bignumber.cpp
字号:
//Big Number
//By Leaving
//super.e@tom.com
//2004-11-1
#include<string>
#include<cstdio>
using namespace std;
const int MAX=200;
int SIZE=MAX*sizeof(int);
class CBigNum{
public:
int num[MAX],len;
CBigNum(){ len=1; memset(num,0,SIZE); }
~CBigNum(){/*printf("Destroy!\n");*/}
void operator = (int n){
int i;
memset(num,0,SIZE);
if(n==0){len=1; return;}
for(i=0; n>0; i++, n/=10)num[i]=n%10;
len=i;
}
int cmp(CBigNum& b){
if(len!=b.len)return len-b.len;
for(int i=len-1;i>=0;i--)
if(num[i]!=b.num[i])return num[i]-b.num[i];
return 0;
}
void operator += (int n){
int i,in=n;
for(i=0; in>0||i<len; i++){
num[i]+=in;
in=num[i]/10;
num[i]%=10;
}
len=i;
}
void operator += (CBigNum& n){
int i,in=0;
for(i=0; i<len || i<n.len || in>0; i++){
num[i]+=n.num[i]+in;
in=num[i]/10;
num[i]%=10;
}
len=i;
}
void operator -= (CBigNum& n){
int i,in=1;
for(i=0;i<len;i++){
num[i]=num[i]-n.num[i]+10+in-1;
in=num[i]/10;
num[i]%=10;
}
for(i=len-1;i>0;i--)if(num[i])break;
len=i+1;
}
void operator *= (int n){
int i,in=0;
if(n==0){(*this)=0; return; }
for(i=0;i<len||in>0;i++){
num[i]=n*num[i]+in;
in=num[i]/10;
num[i]%=10;
}
len=i;
}
void operator *= (CBigNum& n){
int i,j;
CBigNum ans;
for(i=0;i<len;i++)
for(j=0;j<n.len;j++)
ans.num[i+j]+=num[i]*n.num[j];
for(i=0;i<len+n.len+2;i++)
if(ans.num[i]>=10){
ans.num[i+1]+=ans.num[i]/10;
ans.num[i]%=10;
}
for(i=n.len+len+1; i>0; i--)if(ans.num[i])break;
ans.len=i+1;
(*this)=ans;
}
int operator /= (int n){
int i,re=0;
for(i=len-1; i>=0; i--){
num[i]+=re*10;
re=num[i]%n;
num[i]/=n;
}
for(i=len-1; i>=0; i--)if(num[i])break;
if(i>0)len=i+1;
else len=1;
return re; //返回余数
}
/*////////////尽量不用
CBigNum& operator + (int n){
CBigNum ans=(*this);
ans+=(n);
return ans;
}
CBigNum& operator + (CBigNum& n){
CBigNum ans=(*this);
ans += n;
return ans;
}
CBigNum& operator - (CBigNum& n){
CBigNum ans=(*this);
ans -= n;
return ans;
}
CBigNum& operator * (CBigNum& n){
CBigNum ans=(*this);
ans *= n;
return ans;
}
/////////////*/
void Print(){
for(int i=len-1;i>=0;i--) printf("%d",num[i]);
printf("\n");
}
void Print(int pointpos){
for(int i=len-1;i>=0;i--){
printf("%d",num[i]);
if(i==pointpos)printf(".");
}
printf("\n");
}
};
int main(void){
system("PAUSE");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -