大整数乘法-数组实现

实现思路:按照乘法规则,乘数和被乘数分别是,num1,num2。按照从后往前的顺序遍历num1,num2中的每一位上数字,首选取num2的最后一位分别于num1上的每一位相乘,将得到的结果保存在数组ret中,在之后的每一次遍历开始,使得ret都是从上一次开始位置减一出从新开始,并且执行对应位置上的自加操作。最后得到ret,从后往前遍历ret,遇见大于等于10的数字,将其商进位,余数保留。经过一次遍历得到最终乘数。并且考虑首位是否为零的情况。如果为零,则跳过输出,继续下面的输出,输出最终结果

#include

#include
using namespace std;
#define N 14


//int *multi(int* num1, int size1, int* num2, int size2)
//{
// int size = size1 + size2;
// int* ret = new int[size];
// memset(ret, 0, sizeof(int)*size);
//
// for (int i = 0; i < size2; i++)
// {
// int k = i;
// for (int j = 0; j < size1; j++)
// {
// ret[k++] += num1[j] * num2[i];
// }
// }
//
// for (int i = 0; i < size; i++)
// {
// if (ret[i]>=10)
// {
// ret[i + 1] += ret[i] / 10;
// ret[i] %= 10;
// }
// }
// cout << endl;
// return ret;
//
//}


int main(int argc, char** argv){

int num1[N] = { 9, 2, 3, 4, 5, 6, 7, 8, 9, 1, 1, 1, 1, 1 };
int num2[N] = { 9, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5 };


//int* ret = multi(num1, N, num2, N);


int ret[2 * N] = { 0 };
int n = 2 * N - 1;
for (int i = N-1; i >=0 ; i--)
{
int k = n--;


for (int j = N-1; j >=0 ; j--)
{
ret[k--] += num1[j] * num2[i];
}
}


for (int i = 2*N-1; i >=0 ; i--)
{
if (ret[i]>=10)
{
ret[i-1] += ret[i] / 10;
ret[i] %= 10;
}
}


for (int i = 0; i< N*2; i++)
{
if (i==0 && ret[i] == 0)
{
continue;
}
cout << ret[i];
}
return 0;
}

你可能感兴趣的:(C++编程)