Cod sursa(job #3135507)

Utilizator rafaelmedelean03Medelean Rafael Catalin rafaelmedelean03 Data 3 iunie 2023 15:06:15
Problema Algoritmul lui Euclid extins Scor 100
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <stdio.h>
#include <stdlib.h>

#define inpath "euclid3.in"
#define outpath "euclid3.out"

int euclid(int a,int b,int *x,int *y){
    int x0,y0,d;

    if(!b)
    {
        *x = 1;
        *y = 0;
        return a;
    }
    else
    {
        d = euclid(b, a % b, &x0, &y0);
        *x = y0;
        *y = x0 - (a / b) * y0;
    }

    return d;

    }

int main(){

    FILE *in = NULL, *out = NULL;

    if( (in = fopen(inpath, "r")) == NULL )
    {
        printf("Eroare la deschiderea fisierului %s.\n", inpath);
        exit(EXIT_FAILURE);
    }

    if( (out = fopen(outpath, "w")) == NULL )
    {
        printf("Eroare la deschiderea fisierului %s.\n", outpath);
        exit(EXIT_FAILURE);
    }

    int i,a,b,c,d,x,y,t;

    if(fscanf(in,"%d",&t) != 1)
    {
        printf("Eroare citire t \n");
        exit(EXIT_FAILURE);
    }
    for(i = 0; i < t; ++i)
    {
        if(fscanf(in,"%d%d%d",&a,&b,&c) != 3)
        {
            printf("Eroare citire t \n");
            exit(EXIT_FAILURE);
        }

        d = euclid(a, b, &x, &y);
        
        if(c % d)
        {
            fprintf(out,"0 0\n");
        }
        else
        {
            fprintf(out,"%d %d\n",x * (c / d), y * (c / d));
        }
    }


    if( fclose(in) != 0 )
    {
        printf("Eroare la inchiderea fisierului %s.\n", inpath);
        exit(EXIT_FAILURE);
    }

    if( fclose(out) != 0 )
    {
        printf("Eroare la inchiderea fisierului %s.\n", outpath);
        exit(EXIT_FAILURE);
    }
    return 0;
    }