想写一个大整数类,在输入完之后统计长度,调用了size()函数,但是报错了: BigInterger template.cpp:40:44: error: passing 'const BigInterger' as 'this' argument discards qualifiers [-fpermissive] 有哪位大佬解释一下?
#include<iostream>
#include<vector>
using namespace std;
class BigInterger
{
private :
vector<int> wei;
int lenth;
public:
inline void get_size()
{
bool flag=false;
vector<int>::iterator beg=wei.begin(),del;
for(auto i=wei.end()-1;i>beg&&*i==0;--i)
{
flag=true;
if(*(i-1)!=0)
{
del=i;
break;
}
}
if(flag) wei.erase(del,wei.end());
lenth=wei.size();
}
BigInterger():
lenth(1)
{
}
inline void clear()
{
for(int i=0;i<size();++i)
{
wei[i]=0;
}
return;
}
int size() const
{
if(lenth!=wei.size()) get_size();
return lenth;
}
inline BigInterger& operator=(const BigInterger &obj)
{
wei=obj.wei;
get_size();
return *this;
}
inline BigInterger& operator=(int &num)
{
int n2=num;
wei.clear();
while(n2>0)
{
wei.push_back(n2%10);
n2/=10;
}
get_size();
return *this;
}
inline BigInterger& operator=(const int &num)
{
int n2=num;
*this=n2;
get_size();
return *this;
}
inline bool operator==(int num)
{
int len=0;
while(num>0)
{
if(wei[len++]!=num%10) return false;
num/=10;
}
return true;
}
inline BigInterger& operator+=(const BigInterger &obj)
{
int len=cmp(*this,obj);
for(int i=wei.size();i<=len+1;++i)
{
wei.push_back(0);
}
for(int i=0;i!=len;++i)
{
wei[i]+=obj.wei[i];
if(wei[i]>=10)
{
++wei[i+1];
wei[i]-=10;
}
}
get_size();
return *this;
}
inline BigInterger& operator*=(const BigInterger &obj)
{
BigInterger tmp=*this;
int ll=tmp.size()+obj.size();
wei.clear();
wei.reserve(ll);
for(int i=0;i<=ll;++i)
{
wei.push_back(0);
}
int lena=tmp.size();
int lenb=obj.size();
for(int i=0;i<lena;++i)
{
for(int j=0;j<lenb;++j)
{
wei[i+j]+=tmp.wei[i]*obj.wei[j];
wei[i+j+1]+=wei[i+j]/10;
wei[i+j]%=10;
}
}
get_size();
return *this;
}
inline BigInterger& operator*=(const int &num)
{
BigInterger tmp;
tmp=num;
*this*=tmp;
return *this;
}
inline BigInterger operator-(const BigInterger &obj)
{
BigInterger ans;
BigInterger tmp=*this;
int len=cmp(*this,obj);
for(int i=0;i<len;++i)
{
ans.wei[i]=tmp.wei[i]-obj.wei[i];
if(ans.wei[i]<0){ ans.wei[i]+=10; --tmp.wei[i+1]; }
}
return ans;
}
inline BigInterger operator-(int num)
{
BigInterger tmp;
tmp=num;
return *this-tmp;
}
inline void reserve(const unsigned &sum,const int val=0);
friend inline istream& operator>>(istream& in,BigInterger &val);
friend inline ostream& operator<<(ostream& out,const BigInterger &val);
friend inline int cmp(const BigInterger&,const BigInterger&);
};
//..............all the friends...................//
inline int cmp(const BigInterger &a,const BigInterger &b)
{
return a.wei.size()>b.wei.size()?a.wei.size():b.wei.size();
}
inline istream& operator>>(istream& in,BigInterger &val)
{
string buff;
in>>buff;
int len=buff.size();
for(int i=len-1;i>=0;--i)
{
val.wei.push_back(buff[i]-48);
}
val.size();
return in;
}
inline ostream& operator<<(ostream& out,const BigInterger &val)
{
for(int i=val.size()-1;i>=0;--i)
{
out<<val.wei.at(i);
}
val.size();
return out;
}
//..........declarations.............//
int n;
BigInterger num[3000];
BigInterger ans;
BigInterger a,b;
//.........functions..............//
//.......main function............//
int main()
{
cin>>n;
for(int i=1;i<=50;++i)
{
num[i]=1;
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=i;++j)
{
num[i]*=j;
}
ans+=num[i];
}
cout<<ans;
return 0;
}