大数相乘

504 篇文章 0 订阅
// 大数相乘.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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值