作业 HugeInteger 运算符 * 重载 完成结果记录

作业 HugeInteger 运算符 * 重载 完成结果记录

 

HugeInt HugeInt::operator * ( const HugeInt &mul )
{
	HugeInt temp;
	HugeInt tempT;
	HugeInt tempN;
	int carry = 0;
	int n = 0;

	for ( int i = 29; i >= 0; i-- ){
		
		for ( int t = 0; t <= 29; t++ ){
			tempT.integer[ t ] = 0;
			tempN.integer[ t ] = 0;

		}

		for ( int j = 29; j >= 0; j-- ){
			tempT.integer[ j ] = integer[ j ] * mul.integer[ i ] + carry;

			if ( tempT.integer[ j ] > 9 ){
				carry = tempT.integer[ j ] / 10;
				tempT.integer[ j ] %= 10;				

			}

 			else
				carry = 0;

		}
		
		for ( int y = 29; y >= 0; y-- )            // 移位处理
			tempN.integer[ y - n ] = tempT.integer[ y ];

		++n;

		temp = temp + tempN;

	}

	return temp;

}

 

       考虑到乘法运算,比如12 * 34,那么4先和12做乘法,然后3和12做乘法,之后两数相加得出结果,但是需要注意的是:3与12的乘积要左移一位后再与4和12的乘积做加法。依此类推,推之更大的数。

       主要是这个移位处理,费了我好多时间,终于搞定了~

你可能感兴趣的:(作业 HugeInteger 运算符 * 重载 完成结果记录)