求高精度减法,乘法,除法,取模
  • 板块学术版
  • 楼主__infinity
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/11/20 15:57
  • 上次更新2023/10/27 02:12:42
查看原帖
求高精度减法,乘法,除法,取模
554811
__infinity楼主2022/11/20 15:57

求补全下面代码里的-,*,/,%,谢谢!

#include<bits/stdc++.h>
using namespace std;
struct integer
{
	static const int BASE=100000000;
	static const int WIDTH=8;
	vector<int> s;
	integer(long long num=0){*this=num;}
	integer operator =(long long num)
	{
		s.clear();
		do
		{
			s.push_back(num%BASE);
			num/=BASE;
		}while(num);
		return *this;
	}
	integer operator =(const string& str)
	{
		s.clear();
		int x,len=(str.length()-1)/WIDTH+1;
		for(int i=0;i<len;i++)
		{
			int end=str.length()-i*WIDTH;
			int start=max(0,end-WIDTH);
			sscanf(str.substr(start,end-start).c_str(),"%d",&x);
			s.push_back(x);
		}
		return *this;
	}
	bool operator < (const integer& b) const
	{
		if(s.size()!=b.s.size())
			return s.size()<b.s.size();
		for(int i=s.size()-1;i>=0;i--)
			if(s[i]!=b.s[i])
				return s[i]<b.s[i];
		return false;
	}
	bool operator == (const integer& b) const{return !(b< *this)&&!(*this<b);}
	integer operator + (const integer& b) const
	{
		integer c;
		c.s.clear();
		for(int i=0,g=0;;i++)
		{
			if(g==0&&i>=s.size()&&i>=b.s.size())
				break;
			int x=g;
			if(i<s.size())
				x+=s[i];
			if(i<b.s.size())
				x+=b.s[i];
			c.s.push_back(x%BASE);
			g=x/BASE;
		}
		return c;
	}
	integer operator - (const integer& b) const
	{
		//谁帮我写一下
	}
	integer operator * (const integer& b) const
	{
		integer c;
		c.s.clear();
		//未编写 
		return c;
	}
	integer operator / (const integer& b) const
	{
		//谁帮我写一下
	}
	integer operator % (const integer& b) const
	{
		//谁帮我写一下
		integer c;
		c.s.clear();
		
	}
};
ostream& operator << (ostream &out,const integer& x)
{
	out<<x.s.back();
	for(int i=x.s.size()-2;i>=0;i--)
	{
		char buf[20];
		sprintf(buf,"%08d",x.s[i]);
		for(int j=0;j<strlen(buf);j++)
			out<<buf[j];
	}
	return out;
}
istream& operator >> (istream &in,integer& x)
{
	string s;
	if(!(in>>s))
		return in;
	x=s;
	return in;
}
integer ksm(integer a,integer b,integer p)
{
	integer _=1ll;
	if(b==-1ll)
		return _;
	if(b%2==1ll) //mod还没有写
		return a*ksm(a,b-1,p)%p; //乘和减还没有写
	else
	{
		integer ls=ksm(a,b/2,p)%p; //除没有写 
		return ls*ls%p;
	}
}
int main()
{
	integer n,m,p; //高精度数
	cin>>n>>m>>p; //重载了>>
	cout<<ksm(n,m,p); //重载了<<
	return 0; 
}

直接在这个代码上改就行了,不用写一份新的

2022/11/20 15:57
加载中...