!怎么提高程序运行效率

求助!!如何提高程序运行效率!
实现大数的乘法和加法,请问一下还要怎么提高运行效率
LargeNumber LargeNumber::operator+(const LargeNumber& large_num1)
{
    int maxlen = max(len,large_num1.len);
    int len1 = large_num1.len - 1;        //a,b分别表示两个字符数组的长度
    int len2 = len - 1;
    LargeNumber result(maxlen + 1);
    int char1 = 0;          //用来存储第一个字符数组的字符
    int char2 = 0;          //用来存储第二个字符数组的字符
    int c = 0;              //用来存储进位
    for (int i = maxlen; i>0; i--)
    {
        char1 = char2 = 0;
        if (len1 >= 0)
        {
            char1 = large_num1.largeNum[len1] - '0';             //初始化
            len1--;
        }
        if (len2 >= 0)
        {
            char2 = largeNum[len2] - '0';
            len2--;
        }
        result[i] = (char1 + char2 + c) % 10 + '0';
        c = (char1 + char2 + c) / 10;
    }
    result[0] = '0' + c;
    result.del_0();
    return result;
}


LargeNumber LargeNumber::operator*(const LargeNumber& largeNum_1)
{
    start = clock();
    int maxlen = max(largeNum_1.len,len);
    LargeNumber* product = new LargeNumber[maxlen];
    int char1 = 0;                                      //用来存储第一个字符数组的字符
    int char2 = 0;                                      //用来存储第二个字符数组的字符
    product[0] = largeNum_1.len > len ? largeNum_1 : *this;
    product[0].doubleLen();
    for (int i = 1; i < maxlen; i++)
    {
        product[i] = product[i - 1];
    }
    finish = clock();
    cout << finish - start << endl;
    int carry;                                           //进位
    int temp = 0;
    for (int i = largeNum_1.len - 1; i >= 0; i--)
    {
        carry = 0;
        char1 = largeNum_1.largeNum[i];
        if (i < largeNum_1.len - 1)
        {
            temp++;                                      //错位
        }
        //cout<<temp<<endl;
        for (int j = len - 1; j >= -1; j--)
        {
            if (char1 == 0 || char2 == 0)
            {
                product[temp][maxlen * 2 - (len - j) - temp] = '0';
            }
            char2 = largeNum[j];
            product[temp][maxlen * 2 - (len - j) - temp] = (carry + char1 * char2) % 10 + '0';
            carry = (carry + char1 * char2) / 10;
            //cout<<carry<<endl;
        }
    }
    LargeNumber result = product[0];
    for (int i = 1; i < len; i++)
    {
        result = result + product[i];
    }
    return result;
}


------解决思路----------------------
用字符串来表示整数本身效率就不会高了
要效率高应该让每次加法都用到机器的上限,每次加法都是使用 32 位来加,而不是 8 位 8 位的加,数可以表示成整数的数组,而不是字符的数组
------解决思路----------------------
引用:
用字符串来表示整数本身效率就不会高了
要效率高应该让每次加法都用到机器的上限,每次加法都是使用 32 位来加,而不是 8 位 8 位的加,数可以表示成整数的数组,而不是字符的数组


正解,好像有一些第三方的表示大数的类库,如果要表示一个128位整数,可以把他分成两个64位整数分别表示高字节段和低字节段

相关内容推荐