目前见过的有两种情况:
1. 两个高精度数组相乘
这种情况就是res[i+j-1] += a[i] * b[j]
, 然后再进位处理
for(int i=1;i<=al;i++)
for(int j=1;j<=bl;j++)
{
res[i+j-1] += a[i] * b[j];
}
for(int i=1;i<=al+bl;i++)
if(res[i] >= 10)
{
res[i+1] += res[i] / 10;
res[i] %= 10;
}
高精度乘法两个数相乘的题
一个高精度数组内的各个数相乘
设置一个res数组用来存储最后的结果。
外循环循环数组中的每个数字,内循环循环res数组,但是要小于外循环的i。
for(int i=1;i<=n;i++)
{
int c = 0;
for(int j=0;j<N;j++)
{
int temp = a[i] * res[j] + c;
res[j] = temp % 10;
c = temp/ 10;
}
也许对比记忆会好记一点。
试题 历届真题 最小公倍数问题【第二届】【决赛】【本科组】
题解
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 110;
int res[N];
int a[N];
int main()
{
for(int i=1;i<N;i++) a[i] = i;
for(int i=2;i<N;i++)
{
for(int j=i+1;j<N;j++)
if(a[j] % a[i] == 0)
a[j] /= a[i]; //用后面的除以前面的 让其全部互质 乘起来就是最小公倍数
}
int n;
cin>>n;
res[0] = 1; //初始化别忘了
for(int i=1;i<=n;i++)
{
int c = 0;//进位
for(int j=0;j<N;j++)
{
int num = a[i] * res[j] + c;
res[j] = num % 10;
c = num / 10;
}
}
for(int i=N-1;i>=0;i--)
{
if(res[i])
{
for(int j=i;j>=0;j--)
printf("%d",res[j]);
return 0;
}
}
}