您的位置:

c++longint编程之道

一、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++编程必不可少的一项技能,掌握相关知识对于提高我们在算法和数据结构方面的能力必有裨益。