Fork me on GitHub

算法之美--大整数乘法问题

 

数组可以实现的算法很多,典型应用就是大整数相乘问题。利用的思想非常巧妙,感觉和链表实现多项式运算有异曲同工,大整数相乘主要避免计算机存储精度不够的时候。按照基本的乘法运算实现即可!

主要注意返回指针类型,和关键点k=i的技巧。

/*!
 * \file 算法之美--大整数乘法问题.cpp
 *
 * \author ranjiewen
 * \date 2016/12/04 15:58
 *
 * 
 */

#include <iostream> 
using namespace std;

#define  SIZE  14

int *multi(int *_num1, int size1, int *_num2, int size2)
{
    int *ret=nullptr;
    int size = size1 + size2;
    ret = new int[size];

    memset(ret, 0, sizeof(int)*size);

    for (int i = 0; i < size1;i ++)
    {
        int k = i;   //关键点
        for (int j = 0; j < size2;j++)
        {
            ret[k++] += _num1[i] * _num2[j];
        }
    }

    for (int i = 0; i < size;i++)
    {
        if (ret[i]>=10)
        {
            ret[i + 1] += ret[i] / 10;  //注意
            ret[i] = ret[i] % 10;
        }
    }
    return ret;
}

int main(int argc, char** agrv[])
{
    int num1[SIZE] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 1, 1, 1, 1 };
    int num2[SIZE] = { 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5 };

    int *ret = multi(num1,SIZE,num2,SIZE);

    for (int i = 2 * SIZE - 1; i >= 0;i--)
    {
        cout << ret[i];
    }

    delete[] ret;

    return 0;
}

 

posted @ 2016-12-04 16:24  ranjiewen  阅读(1425)  评论(0编辑  收藏  举报