LightOj-1024-Eid

来源:互联网 发布:如何正确看待体检数据 编辑:程序博客网 时间:2024/06/04 20:05

题目传送门


题意:求N个数的最小公倍数。

思路:结果比较大,需要用大整数去写。

#include <bits/stdc++.h>using namespace std;struct bigInt{    int num[2000], len;    void clear()    {        len=0;        memset(num, 0, sizeof(num));    }    void print()    {        printf("%d",num[len]);        for (int i = len-1; i > 0; i--)            printf("%03d", num[i]);        printf("\n");    }};int operator %(bigInt &b, int x){    int tmp = 0;    for (int i = b.len; i > 0; i--)    {        tmp = (tmp*1000+b.num[i])%x;    }    return tmp;}void operator *=(bigInt &b, int x){    for (int i = 1; i <= b.len; i++)    {        b.num[i] *= x;    }    for (int i = 1; i <= b.len; i++)    {        if (b.num[i]>=1000)        {            b.num[i+1] += b.num[i]/1000;            b.num[i] %= 1000;            b.len = max(b.len, i+1);        }    }}int gcd(int x, int y){    if (y==0)        return x;    return gcd(y, x%y);}int main(void){    int T, cas=1;    scanf("%d", &T);    while (T--)    {        int n;        scanf("%d", &n);        bigInt b;        b.clear();        b.len = 1;        b.num[1] = 1;        while (n--)        {            int x, y;            scanf("%d", &x);            y = gcd(x, b%x);            x/=y;            b*=x;        }        printf("Case %d: ",cas++);        b.print();    }    return 0;}
原创粉丝点击