求助 我不理解 该怎么办
  • 板块学术版
  • 楼主Plex
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/11/14 13:06
  • 上次更新2023/11/4 00:37:00
查看原帖
求助 我不理解 该怎么办
244175
Plex楼主2021/11/14 13:06

想写一个大整数类,在输入完之后统计长度,调用了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;
}
2021/11/14 13:06
加载中...