如何乘以2个大数?

Moh*_*uli 1 c++ algorithm math

我创建了一个小的控制台应用程序,乘以2长整数.我不知道我的问题在哪里.这个应用程序工作正常,直到位数为3.

但如果数字的位数大于3,则应用程序的输出错误.:(

请告诉我我的问题在哪里,我解决了.

这是我的代码:

int digits (int n)
{
    int counter = 0;
    while (n > 0)
    {
        n/=10;
        counter++;
    }
    return counter;
}

long longMultiply(long a, long b)
{
    const int S = 3;
    int w,x,y,z;
    int n = max(digits(a),digits(b));

    if(a == 0 || b ==0) {
        return 0;
    } else if (n <= S) {
        return a*b;
    } else {
        int m = (n/2);

        //first number
        x = a/(10^m);
        y = a%(10^m);

        //second number
        w = b/(10^m);
        z = b%(10^m);

        return (longMultiply(x,w)*(10^(2*m)) + (longMultiply(x,z) + longMultiply(w,y)))*(10^m) + longMultiply(y,z) ;

    }
}

int main() {
    //digits(12345);
    cout << longMultiply(100,100);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

cia*_*mej 7

10 ^ m不是10的m次幂,实际上这是m的10 xor

您可以使用powcmath库中的函数(http://www.cplusplus.com/reference/cmath/pow/),但它适用于浮点数.

或者获得10 ^ m,你可以简单地将1 m乘以10.

int m = (n/2);
long tenToM = 1;
for (int i=0; i<m; i++)
    tenToM *= 10;
long tenToTwoM = tenToM * tenToM;
Run Code Online (Sandbox Code Playgroud)

而不是10^m使用tenToM而不是10^(2*m)使用tenToTwoM