//高精度整数的乘法
#include<iostream>
using namespace std;
int Insert(int* a, int na, int x) {
for (int i = na; i > 0; i--)
a[i] = a[i - 1];
a[0] = x;
return na + 1;
}
int Mul(int* a, int na, int x) {
int i;
int jw = 0; //进位
for (i = 0; i < na; i++) {
int temp = a[i] * x + jw;
a[i] = temp % 10;
jw = temp / 10;
}
//进位不为0的时候处理a[na]及以后的位
while (jw != 0) {
a[i] = jw % 10;
i++;
jw = jw / 10;
}
return i;
}
int Mult(int* a, int na, int* b, int nb, int* c) {
int d[100][100];
int i, j, k;
int m = 0;
//初始化为0
for (i = 0; i < 100; i++)
for (j = 0; j < 100; j++)
d[i][j] = 0;
//用a[1], a[2], ... a[na - 1]来乘以b数组中每一个数
//a[i]乘以后的结果存放在 d[i]中
for (i = 0; i < na; i++) {
//先赋值
for (j = 0; j < nb; j++)
d[i][j] = b[j];
m = nb;
//根据i处在什么位置插入0
//i为个位,插入0个0
//i为十位,插入一个0
for (k = 0; k < i; k++)
m = Insert(d[i], m, 0);
//把d[i]的所有元素乘以a[i]
for (k = 0; k < m; k++)
d[i][k] *= a[i];
}
//相加
for (i = 0; i < m; i++)
for (j = 0; j < na; j++)
c[i] += d[j][i];
//进位
for (i = 0; i < m; i++) {
c[i + 1] += c[i] / 10;
c[i] = c[i] % 10;
}
//进位
while (c[i] > 10) {
c[i + 1] = c[i] / 10;
c[i] = c[i] % 10;
i++;
}
return i;
}
int main() {
int a[20] = { 0 }, na;
int b[20] = { 0 }, nb;
int c[40] = { 0 }, nc;
int x1, x2;
int n1, n2;
int i;
a[0] = b[0] = 1;
na = nb = 1;
cin >> x1 >> n1 >> x2 >> n2;
for (i = 0; i < n1; i++)
na = Mul(a, na, x1);
for (i = 0; i < n2; i++)
nb = Mul(b, nb, x2);
nc = Mult(a, na, b, nb, c);
for (i = nc - 1; i >= 0; i--)
cout << c[i] << ' ';
}
实现过程:
最后进位即可得到结果
缺点: a, b, c和d数组的所有元素都要为0
不然出现随机数