1024位大數運算(二)

2021-08-25 02:16:14 字數 2034 閱讀 2234

//求模運算(呼叫除法)

int bigint::mod(_int64 x)

//比較兩個大數的大小(只用於比較兩個同號的大數)

bool bigint::comp(bigint bi)

}else}}

//加法

bigint bigint::add(bigint addend)

else

return sum;

}//符號相同

sum.m_bsign = this->m_bsign ;

sum.m_nlength = (this->m_nlength > addend.m_nlength) ? this->m_nlength : addend.m_nlength;

_int64km= 0;

boolcarry = 0;//進製標識

for(int i=0; im_nvalue[i] + addend.m_nvalue[i] + carry;

if(km > upperbound - 1)//有進製

else

}if(carry)//如果仍有進製,和的長度加一,並置一

//大數與32位無符號整型相加

void bigint::add(unsigned int addend)

else

//仍有進製,繼續進行進製加

for(int i=1; i < this->m_nlength && carry; i++)

else

}if(carry)

else

return diff;

}if(this->comp(subtra))//被減數大於減數

else

carry = 1;

diff.m_nvalue[i] = km;}}

else//同為負號,將被減數很減數都設定為正數,呼叫減法

diff.m_bsign = p;

}else

else

diff.m_bsign = n;

}return diff;

}//大數乘法

bigint bigint::mul(bigint multiplier)

//積可達到的最長的位數

product.m_nlength = this->m_nlength + multiplier.m_nlength;

if(product.m_nvalue[product.m_nlength-1] == 0)

product.m_nlength --;

return product;

}//大數與64位無符號整型相乘(實際達不到64位)

bigint bigint::mul(_int64 multiplier)

if(carry)

else

return product;

}//除法

bigint bigint::div(unsigned int x,unsigned int *m )

if( (result.m_nlength != 1) && (result.m_nvalue[result.m_nlength-1] == 0) )

result.m_nlength --;

if(this->m_bsign == n)

km = 10 - km;

if(m != null)

*m = km;

return result;

}//冪的計算

bigint bigint::power(bigint index)

str[k] = '/0';

k--;

//下面是根據乙個通用的求冪的快速演算法

if(str[k--] == '1')

product.set(*this);

else

product.set(1);

for(int i= k; i>=0; i--)

product.m_bsign = sign;

delete str;

return product;

}

1024位大數運算 一

近來剛完成了1024位大數運算,拿出來跟大家分享一下。有什麼不對的地方希望大家指出來,感激不盡。definemaxlength 1024 最大位數1024 8 definep0 為正數 definen1 為負數 defineupperbound100000000 進製 class bigint 建構...

大數運算 1 大數儲存

int 16位 32768 32767 注 現在大多數的編譯器的int型是32位的 也就是說跟long型的大小一樣 long long或 int64 64位 9223372036854775808 9223372036854775807 float 32位 精確到小數點後6 7位 double 64...

大數運算 4 大數乘法

首先說一下乘法計算的演算法 同樣是模擬人工計算時的方法。從低位向高位乘,在豎式計算中,我們是將乘數第一位與被乘數的每一位相乘,記錄結果之後,用第二位相乘,記錄結果並且左移一位,以此類推,直到計算完最後一位,再將各項結果相加,得出最後結果。計算的過程基本上和小學生列豎式做乘法相同。為程式設計方便,並不...