Dodawanie ułamków, zadanie ze spoja C

0

Sędzia nie chce mi zaakceptować, "przekroczono limit czasu". link do zadania -> http://pl.spoj.com/problems/FR_01_02/
Pomoże ktoś? Oto kod:

#include <stdio.h>

int nww(unsigned int, unsigned int);

int main()
{
    unsigned int a, b, x, licznik1, licznik2, mianownik1, mianownik2, znak1, znak2;

    scanf("%u%c%u %u%c%u", &licznik1, &znak1, &mianownik1, &licznik2, &znak2, &mianownik2);

    if(mianownik1!=mianownik2){
    x=nww(mianownik1,mianownik2);
    a=x/mianownik1;
    a*=licznik1;
    b=x/mianownik2;
    b*=licznik2;
    printf("%u%c%u + %u%c%u = %u%c%u", licznik1, znak1, mianownik1, licznik2, znak2, mianownik2, a+b, znak1, x);
    }
    else
        printf("%u%c%u + %u%c%u = %u%c%u", licznik1, znak1, mianownik1, licznik2, znak2, mianownik2, licznik1+licznik2, znak1, mianownik1);

    return 0;
}
int nww(unsigned int a, unsigned int b)
{
    while (a!=b){
        if (a>b)
            a=a-b;
        else
            b=b-a;
    }
    return a*b;
}

0

Pomyśl nad algorytmem, bo ten działa źle

0

Chodzi o znaki tak?

1

W ogóle nie zwracasz uwagi na wymóg zadania - "Ułamek wynikowy powinien być przedstawiony w postaci nieskracalnej". Pomyśl o tym co Ci będzie potrzebne, a jak już pomyślisz, ze NWD to przypadkiem nie używaj Euklidesa z odejmowaniem tylko z modulo i wykorzystaj go do liczenia NWW (tutaj tylko taki mały protip - nierzadko (a*b)/c =! (a/c)*b))

1 użytkowników online, w tym zalogowanych: 0, gości: 1