今天为大家带来一篇关于大整数类的文章,简单的写了一下关于大整数类的代码,类说白了就是在struct结构体里面写下只有它自己能调用的函数。不多说了 ,写了一个小时。这里没有写关于取余,除法,乘方的,还有正负没有打标记,有兴趣的读者可以自己去改。
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
struct bignum
{
vector<int> v;
bignum operator = (long long l)
{
while(l)
{
v.push_back(l%10);
l/=10;
}
return *this;
}
bool operator < (bignum b) const
{
if (v.size()>b.v.size())
return 0;
else if (v.size()<b.v.size())
return 1;
else
{
for (int i=v.size()-1;i>=0;i--)
{
if (v[i]==b.v[i])
continue;
else if (v[i]>b.v[i])
return 0;
else
return 1;
}
return 0;
}
}
bool operator > (bignum b) const
{
if (v.size()>b.v.size())
return 1;
else if (v.size()<b.v.size())
return 0;
else
{
for (int i=v.size()-1;i>=0;i--)
{
if (v[i]==b.v[i])
continue;
else if (v[i]>b.v[i])
return 1;
else
return 0;
}
return 1;
}
}
bool operator == (bignum b) const
{
if (v.size()!=b.v.size())
return 0;
for (int i=0;i<v.size();i++)
if (v[i]!=b.v[i])
return 0;
return 1;
}
bignum operator + (bignum b)
{
vector<int> t;
int temp=0;
int maxx=max(v.size(),b.v.size());
int minn=min(v.size(),b.v.size());
for(int i=0;i<minn;i++)
{
t.push_back((b.v[i]+v[i]+temp)%10);
if((b.v[i]+v[i]+temp)/10==1)
temp=1;
else temp=0;
}
for(int i=minn;i<maxx;i++)
{
if(maxx==b.v.size())
t.push_back(b.v[i]);
else
t.push_back(v[i]);
}
for (int i=minn;i<maxx-1;i++)
if (t[i]>9)
{
t[i]-=10;
t[i+1]++;
}
if (t[maxx-1]>9)
{
t[maxx-1]-=10;
t.push_back(1);
}
bignum tep;
tep.v=t;
return tep;
}
//只允许用大的减去小的,可以先判断一下再加减
//bool positive表示正负 这里没有 读者可依据实际情况自行修改
bignum operator - (bignum b) const
{
vector<int> t;
for (int i=0;i<b.v.size();i++)
t.push_back(v[i]-b.v[i]);
for (int i=b.v.size();i<v.size();i++)
t.push_back(v[i]);
for (int i=0;i<v.size();i++)
if (t[i]<0)
{
t[i+1]--;
t[i]+=10;
}
int i=t.size()-1;
while(t[i]==0)
{
t.pop_back();
i--;
}
bignum tep;
tep.v=t;
return tep;
}
bignum operator * (bignum b)
{
bignum c;
int alen,blen,maxx,temp,ttemp;
alen=v.size(); blen=v.size();
maxx=alen+blen; c.v.clear();
for(int i=0;i<maxx;i++)
c.v.push_back(0);
for(int i=0;i<alen;i++)
for(int j=0;j<blen;j++)
{
temp=v[i]*b.v[j];
ttemp=temp/10; temp%=10;
c.v[i+j]+=temp;
c.v[i+j+1]+=ttemp;
}
int i=c.v.size()-1;
while(c.v[i]==0)
{
c.v.pop_back();
i--;
}
return c;
}
void print()
{
for (int i=v.size()-1;i>=0;i--)
printf("%d",v[i]);
printf("\n");
}
};
int main()
{
bignum a,b,c;
long long n,m;
a=12; b=13;
c=a+b;
c.print();
c=a*b;
c.print();
return 0;
}