大数相乘

// 大数相乘.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;

// 12345
//*   45
//------

std::string Multiple(std::string &STR1, std::string &STR2)
{
    int len = STR1.size()+STR2.size();
	
    int  *pResult = new int[len];
    int  *pStr1   = new int[STR1.size()];
    int  *pStr2   = new int[STR2.size()];
    char *pOutput = new char[len+1];

    for (int i = 0; i < len; i++)
    {
        pResult[i] = 0;
    }
    memset(pOutput, '\0', len+1);

    for (int i = 0; i < STR1.size(); i++)
    {
        pStr1[i] = STR1[i] - '0';
    }

    for (int j = 0; j < STR2.size(); j++)
    {
        pStr2[j] = STR2[j] - '0';
    }

    int base = 0;
    for (int idx = STR2.size()-1; idx >=0; idx--)
    {
        int kdx = len-1-base;
        for (int jdx = STR1.size()-1; jdx >=0; jdx--)
        {
            pResult[kdx] += pStr2[idx] * pStr1[jdx];
            if (pResult[kdx] > 9)
            {
                pResult[kdx-1] += pResult[kdx]/10;
                pResult[kdx] = pResult[kdx] % 10;
            }
            kdx--;
        }
        base++;
    }

    int ii = 0;
    int jj = 0;

    while (pResult[ii] == 0)
    {
        ii++;
    }

    for (; ii < len; ii++)
    {
        pOutput[jj++] = pResult[ii]+'0';
    }

    string retString(pOutput);

    delete [] pResult;
    delete [] pStr1;
    delete [] pStr2;
    delete [] pOutput;

    return retString;
}


int _tmain(int argc, _TCHAR* argv[])
{
    string str1 = "1234567890";
    string str2 = "1234567890";
    string str3;

    str3 = Multiple(str1, str2);

    cout << str3 << endl;

    return 0;
}

你可能感兴趣的:(大数相乘)