Cod sursa(job #634049)

Utilizator fmanceFelix Gabriel Mance fmance Data 15 noiembrie 2011 16:27:17
Problema Algoritmul lui Euclid extins Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.16 kb
#include <stdio.h>
#include <stdlib.h>

#define FILEIN "euclid3.in"
#define FILEOUT "euclid3.out" 

int euclid(int a, int b, int *x, int *y)
{
    int gcd, *x_old, *y_old;
    
    x_old = malloc(sizeof(int));
    y_old = malloc(sizeof(int));
    
    if (b == 0) {
        *x = 1;
        *y = 0;
        return a;
    } else {
        gcd = euclid(b, a % b, x_old, y_old);
        *x = *y_old;
        *y = *x_old - (a / b) * *y_old;
        return gcd;
    }        
        
}

int main(int argc, char* argv[])
{
    FILE *fileIn, *fileOut;
    int n, i, a, b, c, gcd, *x, *y;
    
    x = malloc(sizeof(int));
    y = malloc(sizeof(int));
    fileIn = fopen(FILEIN, "r");
    fileOut = fopen(FILEOUT, "w");
    if (fileIn == NULL) {
        printf("Cannot open file %s\n", FILEIN);
        exit(1);
    }
    
    else {
        fscanf(fileIn, "%d", &n);
        for (i = 0; i < n; i++) {
            fscanf(fileIn, "%d %d %d", &a, &b, &c);
            gcd = euclid(a, b, x, y);
            if (c % gcd == 0)
                fprintf(fileOut, "%d %d\n", (c / gcd) * *x, (c / gcd) * *y);
            else
                fprintf(fileOut, "0 0\n");
        }
    }
    return 0;
}