您的位置:首页 > 其它

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

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

主要注意返回指针类型,和关键点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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: