亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? biginteger.h

?? 使用分治技術
?? H
?? 第 1 頁 / 共 2 頁
字號:
				ret = false;
			else if (a.Length() < b.Length())
				ret = true;
			else
				for (int i = a.Length(); i >=1 ; i--) 
					if (a.GetData(i) > b.GetData(i)) {
						ret = false;
						break;
					}
					else if (a.GetData(i) < b.GetData(i)) {
						ret = true;
						break;
					}
		}
		else{											//a and b are minus 
			if (a.Length() > b.Length()) 
				ret = true;
			else if (a.Length() < b.Length())
				ret = false;
			else
				for (int i = 1; i <= a.Length(); i++) 
					if (a.GetData(i) > b.GetData(i)) {
						ret = true;
						break;
					}
					else if (a.GetData(i) < b.GetData(i)) {
						ret = false;
						break;
					}
		}

	return ret;
}

template <class T>
bool BigInteger<T>::operator == (const BigInteger<T>& obj){
	bool ret = true;
	BigInteger<T> a(*this), b(obj);
	a = standardize(a);
	b = standardize(b);
	if (a.GetSymbol() == b.GetSymbol() && a.Length() == b.Length()) {
		for (int i = 0; i <= Last; i++){
			if (Data[i] != obj.GetData(i + 1)) {
				ret = false;
				break;
			}
		}
	}
	else
		ret = false;
	
	return ret;	
}

template <class T>
void BigInteger<T>::Input(){
	cout<<"Please input the symbol of big integer('+' or 'minus'):";
	while (1) {
		char smbl;
		cin>>smbl;
		if ('+' == smbl) {
			Symbol = PLUS;
			break;
		}
		if ('-' == smbl) {
			Symbol = MINUS;
			break;
		}
		cout<<"Input symbol invalid,please input again."<<endl;
	}
	cout<<"please input the length of big integer:";
	while (1) {
		cin>>Last;
		if (Last <= MaxSize - 1) break;
		cout<<"Input length isn't allowed greater than maximal size: "<<MaxSize - 1
			<<"Please input again"<<endl;
	}
	
	for (int i = 0; i < Last; i++)
		cin>>Data[i];
}

template <class T>
void BigInteger<T>::Output(){
	cout<<"the big integer is: ";
	if (Symbol == MINUS)
		cout<<'-';
	for (int i = Last; i >= 0; i--)
		cout<<Data[i];
	cout<<endl;
}

template <class T>
ifstream& operator >>(ifstream& in, BigInteger<T>& obj){
	string str;
	getline(in,str,'\n');
	int bufSize = 0;
	int smblflag = 0;
	int strLen = str.length();
	SYMBOL smbl;

	switch(str[0]) {
	case '-':
		smbl =MINUS;
		smblflag = 1;
		bufSize = strLen;
		break;
	case '+':
		smbl = PLUS;
		smblflag = 1;
		bufSize = strLen;
		break;
	default:
		smbl = PLUS;
		bufSize = strLen + 1;
		smblflag = 0;
	}

	T* buf = new T[bufSize];
	buf[bufSize - 1] = 0;
	for (int i = smblflag; i < bufSize - 1 + smblflag; i++)
		buf[bufSize - 2 - i + smblflag] = str[i];
	
	BigInteger<T> num(buf,smbl);	
	obj = num;
	
	return in;
}

template <class T>
ofstream& operator <<(ofstream& out,const BigInteger<T>& obj){
	bool flag = true;

	if (obj.GetSymbol() == MINUS)
		out<<'-';
	
	for (int i = obj.Length(); i >= 1; i--){
		if (obj.GetData(i) == '0' && flag) continue;

		out<<obj.GetData(i);
		flag = false;
	}
	out<<endl;
	
	return out;
}

int MinKthPower(int a, int b, const int& k){
	int ret = 0;
	int n = 0;
	if (k <= 0){
		cerr<<"Invalid value of the third parameters!"<<endl;
		exit(1);
	}
	
	if (a < k || b < k)
		return k;

	if (k == 1)
		return a > b ? a : b;

	while (++n){
		ret = pow(k,n);
		if (ret >= a && ret >= b)
			break;
	}

	return ret;
}

template <class T>
BigInteger<T> abs(const BigInteger<T>& obj){
  BigInteger<T> ret(obj);
  if (ret.GetSymbol() == MINUS) {
	  ret.SetSymbol(PLUS);
  }
  return ret;
}

template <class T>
BigInteger<T> standardize(const BigInteger<T>& obj) {
	BigInteger<T> ret(obj);
	for (int i = ret.Length(); i >= 1; i--) {
		if (ret.GetData(i) != '0') break;
		
		ret.SetLength(i - 1);		
	}
	return ret;
}

template <class T>
BigInteger<T> PositiveIntSubstraction(const BigInteger<T>& X, const BigInteger<T> &Y) {
	BigInteger<T> ret, a(X), b(Y);
	SYMBOL sret = PLUS;

	if (a.GetSymbol() != PLUS || b.GetSymbol() != PLUS) {
		cerr<<"Invalid symbol of the parameter in PositiveIntSubstraction!"<<endl;
		exit(1);
	}

	if (a == b) 
		return a.ZERO();

	BigInteger<T> tmp;
	if (a < b) {			//如果a < b, 交換a,b
		tmp = a;
		a = b;
		b = tmp;
		sret = MINUS;
	}

	int Len1 = a.Length(), Len2 = b.Length();
	b.SetLength(Len1);
	ret.SetLength(Len1);

	char ch;
	bool* C =  new bool[Len1 + 1];
	C[0] = 0;
	for (int i = 1; i <= Len1; i++) {
		ch = a.GetData(i) - b.GetData(i) - C[i - 1] + 58;

		if (ch >= 48 && ch <= 57) {
			C[i] = 1;
		}
		else {
			C[i] = 0;
			ch -= 10;
		}
		ret.SetData(i,ch);
	}

	delete []C;

	ret.SetSymbol(sret);
	return ret;
}

template <class T>
BigInteger<T> TraditionalMultiplication(const BigInteger<T>& a, const BigInteger<T>& b){
	BigInteger<T> ret, tmp;
	int Len1 = a.Length();
	int Len2 = b.Length();
	ret.SetLength(Len1 + Len2);
	tmp.SetLength(Len1 + Len2);
	int* c = new int[Len1 + 1]; 
	int m;	

	for (int j = 1; j <= Len2; j++){
		c[0] = 0;
		tmp.FillNumber('0');
		for (int i = 1; i <= Len1; i++){
			m = (a.GetData(i) - 48) * (b.GetData(j) - 48) + c[i - 1];
			c[i] = m / 10;
			tmp.SetData(i + j - 1,m % 10 + 48);
		}

		if (c[Len1])
			tmp.SetData(Len1 + j, 48 + c[Len1]);

		ret = ret + tmp;
	}

	delete []c;

	ret.SetSymbol(a.GetSymbol() == b.GetSymbol() ? PLUS : MINUS);
	
	return ret;
}

template <class T>
BigInteger<T> OptimizedMultiplication(const BigInteger<T>& a, const BigInteger<T>& b, int div/* = 2*/){
	BigInteger<T> ret, X(a), Y(b);
	
	X = standardize(X);
	Y = standardize(Y);
	int originLen = MinKthPower(X.Length(), Y.Length(), div);	//返回大于len1和len2的最小的2冪次的整數
	X.SetLength(originLen);										//make up the shorted number same as the longer one
	Y.SetLength(originLen);

	if (div == 1 || originLen == div)							//對問題沒有劃分或問題規模達到默認的div長度時,直接運算
		ret = TraditionalMultiplication(X, Y);
	else{
		int dividedLen = originLen / div;

		BigInteger<T>* M = new BigInteger<T>[div];
		BigInteger<T>* N = new BigInteger<T>[div];

		for (int j = 0; j < div; j++) {
			M[j].SetLength(dividedLen);
			N[j].SetLength(dividedLen);
			for (int i = 1; i <= dividedLen; i++) {
				M[j].SetData(i, X.GetData(i + dividedLen * j)); 
				N[j].SetData(i, Y.GetData(i + dividedLen * j));
			}			
		}

		ret = OptimizedFuncion(M, N, originLen, div);
		
		ret.SetSymbol(X.GetSymbol() == Y.GetSymbol() ? PLUS : MINUS);
		
		delete []M;
		delete []N;
	}
		
	return ret;
}

template <class T>
BigInteger<T> LeftShift(const BigInteger<T>&a, int n) {
	BigInteger<T> ret;
	ret.SetSymbol(a.GetSymbol());
	ret.SetLength(a.Length() + n);
	for (int j = 1; j <= n; j++)
		ret.SetData(j,'0');

	for (int i = 1; i <= a.Length(); i++)
		ret.SetData(i + n, a.GetData(i));

	return ret;
}

template <class T>
BigInteger<T> OptimizedFuncion(BigInteger<T> M[], BigInteger<T> N[], int originLen, int div) {
	BigInteger<T> ret;
	int dividedLen = originLen / div;

	BigInteger<T> c0,c1,c2,c3,d0,d1,d2,d3,d4,d5,d6;
	switch(div) {
	case 2:
		//////////////////////////////////////////////////////////////////////////
		//Formula when divide with 2
		//def:n2 = dividedLen / div
		//M * N = (M0 + M1 * 10^n2) * (N0 + N1 * 10^n2)
		//		= M0 * N0 + (M0 * N1 + M1 * N0) * 10^n2 + M1 * N1 * 10^(2*N2)
		//		= M0 * N0 + [(M0 + M1) * (N0 + N1) - M0 * N0 - M1 * N1] * 10^n2 + M1 * N1 * 10^(2*N2)
		//////////////////////////////////////////////////////////////////////////
		
		c0 = M[0] * N[0];
		c1 = M[1] * N[1];
		d0 = c0;
		d1 = (M[0] + M[1]) * (N[0] + N[1]) - c0 - c1; 
		d2 = c1;
		ret = LeftShift(d2, 2 * dividedLen) + LeftShift(d1, dividedLen) + d0;			
		break;
	case 3:
		//////////////////////////////////////////////////////////////////////////
		//Formula when divide with 3
		//def:n3 = dividedLen / div
		//M * N = [M0 + M1 * 10^n3 + M2 * 10^(2*n3)] * [N0 + N1 * 10^n3 + N2 * 10^(2*n3)]
		//		= M0 * N0 + (M0 * N1 + M1 * N0) * 10^n3 + (M0 * N2 + M2 * N0 + M1 * N1) * 10^(2*n3) +
		//		  (M1 * N2 + M2 * N1) * 10^(3*n3) + M2 * N2 * 10^(4*n3) 
		//		= M0 * N0 + [(M0 + M1) * (N0 + N1) - M0 * N0 - M1 * N1] * 10^n3 + 
		//		  [(M0 + M2) * (N0 + N2) + M1 * N1 - M0 * N0 - M2 * N2) * 10^(2*n3) +
		//		  [(M1 + M2) * (N1 + N2) - M1 * N1 - M2 * N2] * 10^(3*n3) + M2 * N2 * 10^(4*n3)
		//////////////////////////////////////////////////////////////////////////
		
		c0 = M[0] * N[0];
		c1 = M[1] * N[1];
		c2 = M[2] * N[2];
		d0 = c0;
		d1 = (M[0] + M[1]) * (N[0] + N[1]) - c0 - c1;
		d2 = (M[0] + M[2]) * (N[0] + N[2]) + c1 - c0 - c2;
		d3 = (M[1] + M[2]) * (N[1] + N[2]) - c1 - c2;
		d4 = c2;
		ret = d0 + LeftShift(d1, dividedLen) + LeftShift(d2, 2 * dividedLen) + LeftShift(d3, 3 * dividedLen) + 
			LeftShift(d4, 4 * dividedLen);
		break;
	case 4:	
		// 算式錯誤! [10/15/2008]
		c0 = M[0] * N[0];
		c1 = M[1] * N[1];
		c2 = M[2] * N[2];
		c3 = M[3] * N[3];
		d0 = c0;
		d1 = (M[0] + M[1]) * (N[0] + N[1]) - c0 - c1;
		d2 = (M[0] + M[2]) * (N[0] + N[2]) + c1 - c0 - c2;
		d3 = (M[0] + M[3]) * (N[0] + N[3]) + (M[1] + M[3]) * (N[1] + N[3]) - c0 - c1 - c2 -c3;
		d4 = (M[1] + M[3]) * (N[1] + N[3]) + c2 - c1 - c3;
		d5 = (M[2] + M[3]) * (N[2] + N[3]) - c2 - c3;
		d6 = c3;
		ret = d0 + LeftShift(d1,dividedLen) + LeftShift(d2, 2 * dividedLen) + LeftShift(d3, 3 * dividedLen) +
			LeftShift(d4, 4 * dividedLen) + LeftShift(d5, 5 * dividedLen) + LeftShift(d6, 6 * dividedLen);
		break;
 	default:
		cerr<<"can not deal with this partition, div = "<<div<<endl;
		exit(1);
		break;
	}

	return ret;
}

template <class T>
BigInteger<T> BigInteger<T>::ZERO() {
	BigInteger<T> ret(1);
	ret.SetLength(1);
	return ret;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人av在线影院| 久久久久久免费| 久久蜜桃av一区精品变态类天堂 | 成人黄色片在线观看| 欧美日韩国产经典色站一区二区三区| 久久久影视传媒| 免费人成在线不卡| 欧美在线一区二区三区| 国产三级精品视频| 麻豆一区二区99久久久久| 日本韩国欧美在线| 国产精品乱人伦中文| 精品一区二区三区久久| 欧美丰满少妇xxxxx高潮对白 | 亚洲一区二区三区激情| 国产成人综合视频| 精品国产一区久久| 久久激情五月激情| 欧美一级一区二区| 香蕉成人伊视频在线观看| 91福利精品第一导航| 亚洲精品菠萝久久久久久久| 成人av在线一区二区三区| 久久久综合网站| 国产精品综合视频| 国产亚洲欧美在线| 国产经典欧美精品| 国产日韩在线不卡| 成人久久视频在线观看| 国产精品久久久久久久久图文区 | 毛片不卡一区二区| 日韩欧美亚洲国产精品字幕久久久| 天天射综合影视| 91精品国产麻豆| 日韩精品电影一区亚洲| 91精品久久久久久久91蜜桃| 视频在线观看一区| 日韩欧美高清dvd碟片| 日本不卡免费在线视频| 欧美www视频| 黄一区二区三区| 国产精品女同互慰在线看| av不卡在线播放| 亚洲国产综合91精品麻豆| 欧美自拍丝袜亚洲| 日本亚洲最大的色成网站www| 欧美另类videos死尸| 日韩av一区二区在线影视| 精品久久免费看| 国产精品18久久久久久久久久久久 | 裸体一区二区三区| 日韩一区二区三区免费看| 久99久精品视频免费观看| 2024国产精品视频| 93久久精品日日躁夜夜躁欧美| 亚洲午夜久久久久久久久电影网| 欧美一区二区三区免费大片| 国内一区二区视频| 亚洲精品国久久99热| 欧美日韩免费观看一区三区| 蜜桃精品在线观看| 亚洲欧洲精品一区二区精品久久久 | 久久综合九色综合97婷婷女人 | 欧美精品第1页| 国产精品一线二线三线精华| 亚洲少妇中出一区| 欧美一区二区三区视频免费| 福利一区二区在线| 午夜伦理一区二区| 欧美激情综合网| 91精品国产全国免费观看| 成人av在线一区二区| 青青草原综合久久大伊人精品优势| 国产欧美精品区一区二区三区| 欧美色图天堂网| 国产精品一区二区免费不卡| 亚洲国产日韩在线一区模特| 国产色综合一区| 欧美日本韩国一区| 99re这里只有精品首页| 麻豆精品在线播放| 亚洲精品国产一区二区三区四区在线| 精品剧情v国产在线观看在线| 91成人在线观看喷潮| 成人小视频免费在线观看| 日韩高清电影一区| 亚洲另类一区二区| 国产亚洲综合性久久久影院| 欧美夫妻性生活| 在线精品亚洲一区二区不卡| 成人爽a毛片一区二区免费| 丝袜亚洲另类欧美| 亚洲精品一卡二卡| 国产精品国产三级国产a| xvideos.蜜桃一区二区| 欧美一区二区三区在线看| 色偷偷一区二区三区| kk眼镜猥琐国模调教系列一区二区| 免费成人av资源网| 亚洲成人激情自拍| 一级中文字幕一区二区| 亚洲免费av观看| 亚洲欧美另类在线| 亚洲欧美日韩中文字幕一区二区三区 | 国产精品一线二线三线| 看电视剧不卡顿的网站| 日韩av高清在线观看| 亚洲va国产天堂va久久en| 亚洲国产一区二区a毛片| 一区二区视频在线看| 亚洲欧美日韩精品久久久久| 国产精品久久久久婷婷| 日本一区二区三区国色天香 | 亚洲成人动漫精品| 亚洲国产精品自拍| 午夜久久久久久| 人人狠狠综合久久亚洲| 午夜精品一区在线观看| 日本在线不卡一区| 久久99精品久久久久久| 国产一本一道久久香蕉| 成人一级片在线观看| 91天堂素人约啪| 欧美日韩三级视频| 欧美老年两性高潮| 2欧美一区二区三区在线观看视频| 欧美v日韩v国产v| 国产午夜精品久久| 亚洲欧洲av一区二区三区久久| 亚洲欧美成aⅴ人在线观看| 亚洲精品美国一| 首页国产欧美久久| 国产一区二区三区蝌蚪| 白白色 亚洲乱淫| 欧洲亚洲国产日韩| 精品国内二区三区| 中文字幕色av一区二区三区| 夜夜精品浪潮av一区二区三区| 亚洲大片精品永久免费| 美国十次了思思久久精品导航| 国产成人免费视频网站| 色婷婷激情一区二区三区| 欧美精品丝袜中出| 国产欧美在线观看一区| 亚洲永久免费av| 久久国产视频网| 一本大道久久a久久精二百| 欧美一级欧美一级在线播放| 中文av一区特黄| 亚洲国产日韩综合久久精品| 韩国精品在线观看| 一本色道久久加勒比精品| 日韩三级精品电影久久久| 欧美激情一区三区| 日本vs亚洲vs韩国一区三区二区 | 国产精品一区二区视频| 色国产综合视频| 久久免费视频一区| 午夜精品免费在线观看| 成人精品小蝌蚪| 欧美不卡一区二区三区| 一区二区三区在线影院| 国精产品一区一区三区mba视频| 色狠狠色狠狠综合| 国产午夜久久久久| 日韩电影一区二区三区四区| 97精品电影院| 久久久亚洲精品一区二区三区| 亚洲国产视频一区| 不卡视频在线观看| 国产亚洲1区2区3区| 日韩国产精品久久久久久亚洲| 91一区二区在线| 欧美精品一区二区三区高清aⅴ | 午夜电影一区二区三区| 97精品国产97久久久久久久久久久久| 欧美成人精品1314www| 亚洲国产精品自拍| 一本大道久久精品懂色aⅴ| 欧美高清在线视频| 国产一区二区三区高清播放| 欧美一区二区三区视频在线观看| 亚洲视频在线一区| 国产成人免费视频网站| 欧美成人a视频| 喷白浆一区二区| 91精品国产综合久久福利软件| 亚洲一区二区三区四区在线观看| 91在线免费播放| 亚洲欧美欧美一区二区三区| 成人高清视频免费观看| 2023国产精华国产精品| 老司机精品视频在线| 欧美一级淫片007| 六月婷婷色综合| 91精品国产一区二区三区| 婷婷久久综合九色综合伊人色| 欧美性大战久久久| 亚洲国产日韩一区二区| 欧美日韩亚洲另类|