Cod sursa(job #1669036)

Utilizator Birsan_EvaBirsan Eva Birsan_Eva Data 30 martie 2016 12:02:52
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.28 kb
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

void printh(int x[])
{
    for(int i = x[0]; i >= 1; i--)
        printf("%d",x[i]);
    printf("\n");
}

void adh(int a[],int b[],int c[])
{
    int tr,i,aux;
    c[0] = max(a[0],b[0]);
    tr = 0;
    for(i = 1; i <= c[0]; ++i)
    {
        aux = a[i] + b[i] + tr;
        c[i] = aux % 10;
        tr = aux / 10;
    }
    if(tr)
        c[++c[0]] = tr;
}

int comp(int a[],int b[])
{
    if(a[0] > b[0])
        return 1;
    else if(a[0] < b[0])
        return -1;
    for(int i = a[0]; i >= 1; i--)
    {
        if(a[i] > b[i])
            return 1;
        else if(a[i] < b[i])
            return -1;
    }
    return 0;
}

void sch(int a[],int b[],int c[])
{
    int i,imp,aux;
    imp = 0;
    c[0] = a[0];
    for(i = 1; i <= c[0]; i++)
    {
        aux = a[i] - b[i] - imp;
        if(aux < 0)
        {
            aux += 10;
            c[i] = aux % 10;
            imp = 1;
        }
        else
        {
            c[i] = aux;
            imp = 0;
        }
    }
    while(c[0] > 1 && c[c[0]] == 0)
        c[0]--;
}

void prodh(int a[],int k,int c[])
{
    c[0] = a[0];
    int i,tr,aux;
    for(i = 1;i <= a[0];i++)
        c[i] = a[i] * k;
    tr = 0;
    for(i = 1;i <= c[0];i++)
    {
        aux = c[i] + tr;
        c[i] = aux % 10;
        tr = aux / 10;
    }
    while(tr)
    {
        c[++c[0]] = tr % 10;
        tr /= 10;
    }
}
int main()
{
    freopen("hugenr.in", "r",stdin);
    freopen("hugenr.out", "w",stdout);
    int a[100],b[100],c[100];
    int n,i;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    memset(c,0,sizeof(c));
    char sir[100];
    gets(sir);
    n = strlen(sir);
    for(i = n - 1; i >= 0; i--)
        a[n - i] = sir[i] - 48;
    a[0] = n;
    gets(sir);
    n = strlen(sir);
    for(i = n - 1; i >= 0; i--)
        b[n - i] = sir[i] - 48;
    b[0] = n;
    adh(a,b,c);
    printh(c);
    printf("%d\n",comp(a,b));
    if(comp(a,b) >= 0)
    {
        sch(a,b,c);
        printh(c);
    }
    else
    {
        sch(b,a,c);
        printf("-");
        printh(c);
    }
    int x;
    scanf("%d", &x);
    prodh(a,x,c);
    printh(c);
    return 0;
}