我有一个项目(用于学校),我绝对不能使用任何外部库,因此不能使用任何大数字库,我需要获得 2 个(非常)大数字的乘积。所以我想我实际上会为它编写自己的代码,但我似乎无法通过个位数乘法。
到目前为止,我所做的是我有一个字符数组'a'。并且将其每个数字与另一个数字相乘(因为乘法不能超过 81,即 9*9)。但我似乎无法弄清楚如何将两个数组相乘。
如中,
int a[] = {1,2,3};
int b[] = {4,5,6};
int r[200]; // To store result of 123x456. After processing should have value 56088
到目前为止,这是我的代码...
#include <iostream>
using namespace std;
void reverseArray(int array[], int n)
{
int t;
for(int i=0;i<n/2;i++)
{
t = array[i];
array[i] = array[n-i-1];
array[n-i-1] = t;
}
}
int main()
{
int A[] = {1,2,6,6,7,7,8,8,8,8,8,8,8,8,8,8};
int s = sizeof(A)/sizeof(int);
int n = s-1;
int R[50];
int x = 2;
int rem = 0;
for(int i=0; i<s; i++)
{
R[i] = (A[n-i] * x) % 10;
R[i] += (rem != 0) ? rem:0;
rem = (A[n-i] * x) / 10;
}
reverseArray(R, s);
for(int i=0; i<s; i++) cout<<R[i]; // Gives 2533557777777776
}
我还在这里找到了一个类似的程序,它计算非常大的数的阶乘。但我似乎无法充分理解代码以将其更改为我的需要。
对不起,如果这个问题有点粗略。
谢谢。