大整数存储及初始化
C++版
struct BigInt
{
int num[400];//store in reverse
int length;
bool sign;
BigInt();
};
ostream & operator <<(ostream & output,BigInt x)
{
for(int i=x.length-1;i>=0;i--)
output<<x.num[i];
return output;
}
BigInt::BigInt()
{
for(int i=0;i<maxsize;i++)
num[i]=0;
length=0;
sign=true;
}
void transfer(string s,BigInt &x)
{
for(int i=s.size()-1;i>=1;i--)
x.num[x.length++]=s[i]-'0';
if(s[0]=='-')
x.sign=false;
else
x.num[x.length++]=s[0]-'0';
}
加法:
C语言版
void BigIntPlus(BigInt a,BigInt b,BigInt *ans)
{
int i,j=0;
if(a.sign&&b.sign)
{
for(i=0;i<maxsize;i++)
{
ans->num[j]+=a.num[i]+b.num[i];
if(ans->num[j]>=10)
{
ans->num[j]-=10;
ans->num[j+1]++;
}
j++;
}
}
for(i=maxsize-1;i>=0;i--)
{
if(ans->num[i]!=0)
break;
}
ans->length=i+1;
}
乘法:
C语言版
int BigInt_Multiply(int num[],int a,int len)//the ans is inverse
{
int last=len;
int cf=0;//carry flag
for(int i=0;i<=len;i++)
{
num[i]=num[i]*a+cf;
if(b[i]>=10)
{
cf=num[i]/10;
num[i]%=10;
if(i==len)
{
last++;
num[i+1]=cf;
}
}
else
cf=0;
}
return last;//show the highest place in the num
}
幂
int BigInt_Pow(int a,int n,int ans[])
{
int last=0;
for(int i=1;i<=n;i++)
last=BigInt_Multiply(ans,a,last);
return last;
}