算法之美--大整数乘法问题
2016-12-04 16:24
162 查看
数组可以实现的算法很多,典型应用就是大整数相乘问题。利用的思想非常巧妙,感觉和链表实现多项式运算有异曲同工,大整数相乘主要避免计算机存储精度不够的时候。按照基本的乘法运算实现即可!
主要注意返回指针类型,和关键点k=i的技巧。
主要注意返回指针类型,和关键点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; }
相关文章推荐
- 超长整数字符串乘法的算法
- 算法之矩阵链乘法问题
- 大整数乘法算法简单实现 java
- 五大常用算法(一) 分治算法(2) 大整数乘法
- 大整数乘法问题
- [算法]连续正整数问题(续)
- 【老鸟学算法】大整数乘法——算法思想及java实现
- 大整数乘法算法
- 算法系列:大整数的乘法
- 大整数的乘法——比较好的算法! (转…
- 大整数乘法---FFT算法
- 分治法解决大整数乘法问题
- 整数划分问题及其算法
- 【算法】 大整数乘法
- 值得注意的算法问题,“两次减法操作”竟然比“一次2倍乘法和一次加法”要慢一秒
- [算法]整数划分问题
- 整数划分问题及其算法
- 问题描述如下: 有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明); 要求找出这2.5亿个数字里面,不重复的数字的个数; 另外,可用的内存限定为600M; 要求算法尽量高效,最优;
- 大整数乘法问题(学习笔记)
- 【老鸟学算法】大整数乘法——算法思想及java实现