首页 > 解决方案 > 使用指向大于 intMAX 的乘数的指针

问题描述

我有 2 个非常大的数字存储在指针中,例如数字:1234567891234567891234567890 存储为:123 456 789 012 345 678 901 234 567 890。对于这些大数字,我需要进行乘法运算并将其存储在另一个指针中。cijfervakje 是 3 组中的一组。 gg&object 也是 adres 的数字。

我的问题是我没有访问正确的大数字 cijvervakjes,但我不知道如何解决它。

void gg::multi(gg & objectA, gg & objectB){
    cijfervakje * helpA = objectA.exit;
    cijfervakje* helpB = objectB.exit;
    int numberA = 0; int numberB = 0; int carry = 0;
    int ans; int length;
    gg * helpLijst = new gg;

    delete(); //empties the list where the answer will go.

    while (helpA != nullptr || helpB != nullptr) {
        numberA = 0; numberB = 0;
        if(helpA != nullptr) {
            numberA = numberA -> info;
            helpA = helpA -> vorige;
        }
        if (helpB != nullptr) {
            numberB = helpB -> info;
            helpB = helpB -> vorige;
        }
        ans = numberA * numberB;
        carry = 0; //Reset the carry
        length = meetLengte(ans);
        if(length > k) {
            carry = ans / tienTotDeMacht(k); //determine first number.
            ans -= carry * tienTotDeMacht(k); /// remove first number
        }
        addBefore(ans, length);
    }
}

class cijfervakje {
public:
    cijfervakje* vorige;
    int info; //Geeft het getal in dit vakje.
    int lengte; //Geeft de lengte van het getal in dit vakje.
    cijfervakje* volgende;
};

如果需要更多代码或解释,请询问

标签: c++pointers

解决方案


好吧,你的一些问题没有意义。首先,不要使用指针来做数学。不过,我不认为这实际上是你正在做的事情。

您正在使用指向 cijfervakje 类型对象的指针,但您没有提供该代码,因此我们不知道它的作用。

你知道 C++ 中不同类型的整数吗?您可以使用:

int 通常 4 字节长可能是 4 或 8 字节长,对于高达 180 亿 2^64 的值,通常为 8 字节。

你不能在一个指针中做任何你不能在 long long 中做的事情。

但可能是您使用的课​​程实际上做了很长的数学运算。如果是这样,我们需要更多地了解该课程以帮助您。


推荐阅读