高精度乘法
代码如下:
#include <bits/stdc++.h>
using namespace std;
int b[50010], a[50010];
int c[10010];
void Print(int n)
{
memset(c, 0, sizeof(c));
int m = 1;
c[0] = 1;
for(int i = 0; i < n; i++)
{
int len = 0;
for(int j = 0; j < m; j++)
c[j] *= a[i];
for(; c[len] || len < m; len++)
c[len+1] += c[len]/10, c[len] %= 10;
m = len;
}
for(int i = m-1; i >= 0; i--)
printf("%d", c[i]);
printf("\n");
return ;
}
int main ()
{
int t, cnt = 1;
scanf("%d", &t);
while(t--)
{
memset(b, 0, sizeof(b));
int n, len = 0;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
int x;
scanf("%d", &x);
int k = sqrt(x);
for(int i = 2; i <= k && i <= x; i++)
{
int sum = 0;
while(x%i == 0)
{
x /= i;
sum++;
}
b[i] = max(b[i], sum);
}
if(x != 1 && x < 50001) b[x] = max(b[x], 1);
if(x > 50000) a[len++] = x;
}
for(int i = 2; i <= 50001; i++)
if(b[i])
{
a[len] = 1;
while(b[i]--)
{
a[len] *= i;
}
len++;
}
printf("Case %d: ", cnt++);
Print(len);
}
return 0;
}