大整数相乘问题-数组解决

用数组解决大整数乘法问题:

问题描述:

  我们都知道,计算机的精度是有限的,对于大数的乘法问题,如果单单使用程序设计语言里面的原子数据类型来完成两个大整数的乘法问题,显示是不切实际的,因此,需要用一定的存储结构对大整数进行存储,在这里,我们可以用数组来进行存储这些大整数,每个数组元素是一个小于10的一个整数,用来代表大整数的每一位,当然,你也可以用链表进行存储和计算。在这里,主要有两个操作:1、计算并且用数组保存计算结果,2、对数组的每一个元素判断是否进行进位操作,下面来直接看代码吧!

c++代码:

 1 #include<iostream>
 2 #include<memory>
 3 using namespace std;
 4 const int SIZE1 = 10;
 5 const int SIZE2 = 10;
 6 int* caculate(int* num1,int size1,int* num2,int size2);
 7 int main()
 8 {
 9     int num1[SIZE1] = { 1,2,3,4,5,6,7,8,9,6 };//数字955987654321
10     int num2[SIZE2] = { 9,8,7,6,5,4,3,2,1,9 };//数字629123456789
11     int* ret = caculate(num1, SIZE1, num2, SIZE2);
12     for (int j = SIZE1 - 1; j >= 0; j--)
13         cout << num1[j];
14     cout << "乘以";
15     for (int k = SIZE2 - 1; k >= 0; k--)
16         cout << num2[k];
17     cout << endl << "得出:";
18     for (int i = SIZE1 + SIZE2 - 1; i >= 0; i--)
19     {
20         if (ret[i] != 0)
21             cout << ret[i];
22         else
23             continue;
24     }
25     delete ret;//释放内存空间
26     system("pause");
27     return 0;
28 }
29 int* caculate(int* num1, int size1, int* num2, int size2)
30 {
31     int SIZE = size1 + size2;
32     int* ret = new int[SIZE];
33     memset(ret, 0, sizeof(int)*SIZE);
34     int k = 0;
35     //运算操作
36     for (int i = 0; i < size2; i++) 
37     {
38         k = i;
39         for (int j = 0; j < size1; j++)
40         {
41             ret[k++] += num1[i] * num2[j];
42         }
43     }
44     //进位操作
45     for (int i = 0; i < SIZE; i++)
46     {
47         if (ret[i] >= 10)
48         {
49             ret[i + 1] = ret[i] / 10;
50             ret[i] = ret[i] % 10;
51         }
52     }
53     return ret;
54 }

欢迎评论!

posted on 2019-03-12 10:51  new一个世界  阅读(560)  评论(0编辑  收藏  举报

导航