一、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) putchar('0'); for (; 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四、比较运算
我们可以重载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<(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; }五、总结
以上就是c++longint编程的一些基础内容。通过自定义longint类和重载运算符,我们可以更加方便地进行高精度运算,例如解决大整数相关的算法问题,或构建高效数据结构。longint编程是c++编程必不可少的一项技能,掌握相关知识对于提高我们在算法和数据结构方面的能力必有裨益。