一、longint的概述
在c++中,long int常常被用來存儲大於普通int類型的數據。如果我們需要存儲大於10位數的數,無論是在演算法還是數據結構中,long int都能滿足我們的需求。
它在各個平台上的大小可能不同,但通常是32位或64位。在32位平台上,long int的範圍為-2147483648到2147483647。我們必須使用高精度演算法或BigInteger庫來處理更大的數。
在實際編程中,可以通過編寫longint類的代碼來使其操作更加容易和方便。下面我們將從如何定義longint類、如何進行四則運算、以及如何進行高精度比較等方面進行詳細介紹。
二、定義longint類
定義longint類的時候,我們需要注意以下幾個問題:
1、使用字元數組來存放longint
class Longint {
private:
char data[LEN]; //data用來存放longint
...
}
2、通過構造函數來初始化longint
Longint::Longint() {
memset(data, 0, sizeof(data));
}
Longint::Longint(const char *str) {
memset(data, 0, sizeof(data));
int len = strlen(str), j = 0;
for (int i = len - 1; i >= 0; i--) {
if (isdigit(str[i]))
data[j++] = str[i] - '0';
else
break;
}
}
3、通過print函數來將longint以字元串的形式輸出
void Longint::print() {
int i;
for (i = LEN - 1; i >= 0; i--)
if (data[i]) break;
if (i = 0; i--) putchar(data[i] + '0');
}
三、longint的四則運算
我們通過重載運算符來方便地進行四則運算
1、加法運算
Longint Longint::operator+(const Longint &b) const {
Longint c;
int i, g = 0;
for (i = 0; i < LEN; i++) {
c.data[i] = data[i] + b.data[i] + g;
g = c.data[i] / 10;
c.data[i] %= 10;
}
return c;
}
2、減法運算
Longint Longint::operator-(const Longint &b) const {
Longint c;
int i, g = 0;
for (i = 0; i < LEN; i++) {
c.data[i] = data[i] - b.data[i] - g;
if (c.data[i] < 0) {
c.data[i] += 10;
g = 1;
} else {
g = 0;
}
}
return c;
}
3、乘法運算
Longint Longint::operator*(const Longint &b) const {
Longint c;
int i, j, g = 0;
for (i = 0; i < LEN; i++) {
if (!data[i]) continue;
g = 0;
for (j = 0; j < LEN; j++) {
c.data[i+j] += data[i] * b.data[j] + g;
g = c.data[i+j] / 10;
c.data[i+j] %= 10;
}
}
return c;
}
4、除法運算
Longint Longint::operator/(const Longint &b) const {
Longint c, f;
int i, j;
for (i = LEN - 1; i >= 0; i--) {
f=f*10;
f.data[0]=data[i];
for (j = 0; j < 10; j++) {
if (f<b*(j+1)) {
c.data[i] = j;
break;
}
}
f=f-b*c.data[i];
}
return c;
}
四、比較運算
我們可以重載relational運算符來方便地進行比較運算
1、等於運算
bool Longint::operator==(const Longint &b) const {
for (int i = 0; i < LEN; i++)
if (data[i] != b.data[i])
return false;
return true;
}
2、大於運算
bool Longint::operator>(const Longint &b) const {
for (int i = LEN - 1; i >= 0; i--)
if (data[i] > b.data[i])
return true;
else if (data[i] < b.data[i])
return false;
return false;
}
3、小於運算
bool Longint::operator= 0; i--)
if (data[i] b.data[i])
return false;
return false;
}
五、總結
以上就是c++longint編程的一些基礎內容。通過自定義longint類和重載運算符,我們可以更加方便地進行高精度運算,例如解決大整數相關的演算法問題,或構建高效數據結構。longint編程是c++編程必不可少的一項技能,掌握相關知識對於提高我們在演算法和數據結構方面的能力必有裨益。
原創文章,作者:SEEPE,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/317412.html
微信掃一掃
支付寶掃一掃