Cod sursa(job #1822208)

Utilizator cyg_ieeuVasile Radu-Andrei cyg_ieeu Data 4 decembrie 2016 15:21:25
Problema Multiplu Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <cstdio>
#include <cstring>
using namespace std;
int cm[1000],cmi[1000],ih[1000],rez[1000];
int cmmdc(int a,int b)
{
    int r;
    while(b)
    {
        r = a % b;
        a = b;
        b = r;
    }
    return a;
}
int zu(int cm[1000])
{
    int i;
    for(i = cm[0];i >= 1;i--)
        if(cm[i] > 1)
            return 0;
    return 1;
}
int nrcf(int nr)
{
    int nrcf = 0;
    do
    {
        nrcf++;
        nr /= 10;
    }while(nr);
    return nrcf;
}
void trh(long long nr,int a[1000])
{
    int nrc,i;
    nrc = nrcf(nr);
    a[0] = nrc;
    for(i = 1;i <= a[0];i++)
    {
        a[i] = nr % 10;
        nr /= 10;
    }
}
void hugep(int a[1000],int b[1000],int c[1000])
{
    int i,j,tr,aux;
    for(i = 1;i <= c[0];i++)
        c[i] = 0;
    c[0] = a[0] + b[0] - 1;
    for(i = 1;i <= a[0];i++)
        for(j = 1;j <= b[0];j++)
            c[i + j - 1] += a[i] * b[j];
    tr = 0;
    for(i = 1;i <= c[0];i++)
    {
        aux = c[i] + tr;
        c[i] = aux % 10;
        tr = aux / 10;
    }
    if(tr)
        c[++c[0]] = tr;
}
int main()
{
    freopen("multiplu.in", "r",stdin);
    freopen("multiplu.out", "w",stdout);
    int a,b,i;
    scanf("%d%d", &a, &b);
    long long cmmmc;
    cmmmc = (a * b) / cmmdc(a,b);
    trh(cmmmc,cm);
    memcpy(cmi,cm,sizeof(cm));
    for(i = 2;zu(cm) == 0;i++)
    {
        trh(i,ih);
        hugep(cmi,ih,rez);
        memcpy(cm,rez,sizeof(rez));
    }
    for(i = cm[0];i >= 1;i--)
        printf("%d",cm[i]);
    return 0;
}