eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › porownanie wyniku mnozenia integerow
Ilość wypowiedzi w tym wątku: 13

  • 11. Data: 2011-05-26 13:07:56
    Temat: Re: porownanie wyniku mnozenia integerow
    Od: bartekltg <b...@o...pl>

    W dniu 2011-05-26 08:40, Paweł Kierski pisze:
    > W dniu 2011-05-25 20:39, bartekltg pisze:
    > [...]
    >> Ktoś podesłał pomysł rozkładu na czynniki pierwsze. Można pociągnąć
    >> ten pomysł. Policzymy NWD (najwiekszy wspolny dzielnik)
    >> dla wszytkich możliwytch par i będziemy skracać.
    >>

    ***************
    >> x=NWD(a,c);
    >> a=a/x; c=c/x;
    >>
    >> i podobnie dla par a:d, b:c, b:d (najpierw skracamy, pozniej
    >> liczymy kolejne NWD)
    ***************

    >>
    >> Po wszystkich skróceniach, jeśli iloczyny były równe, otrzymamy
    >> cztery jedynki.
    >
    > Drobna poprawka - nie dla wszystkich możliwych par: nie skracamy a:b
    > i c:d 8-)

    "Wszystkich" oznacza wszystkich wymienionych.
    Obramowałem fragment, gdzie wymienione są cztery potrzebne pary.


    Zresztą, wersja z pięcioma równościami modulo jest lepsza;)
    NWD było raczej jako ciekawostka, jak skorzystać z pomysłu
    rozkładu na czynniki pierwsze, ale nie liczyć rozkładu
    bezpośrednio (przydługie i nieefektywne).


    pozdrawiam
    bartekltg


  • 12. Data: 2011-05-26 21:14:07
    Temat: Re: porownanie wyniku mnozenia integerow
    Od: Jędrzej Dudkiewicz <j...@n...com>

    On 05/25/2011 01:32 AM, Wiktor S. wrote:
    >> w jakim celu?
    >> co najwyzej mozna dodac informacje ze a*b moze (ale musi) > MAX_INT
    >> ale to nic nie wnosi :)
    >
    >
    > to nam psuje warunek, przykładowo GCC 4.6.0 przy takim czymś
    >
    > cout << boolalpha << (4*1073741826 == 4*2);
    >
    > sypie warningiem podczas kompilacji, i niestety, wyświetla true.

    Co niestety, co niestety. Undefined behaviour, o ile wiem. Ciesz się, że
    w ogóle wyświetla.

    JD


  • 13. Data: 2011-06-03 14:17:45
    Temat: Re: porownanie wyniku mnozenia integerow
    Od: Pawel WQLQS <p...@g...com>

    On 24 Maj, 20:28, " " <t...@g...SKASUJ-TO.pl> wrote:
    > witam,
    >
    > jak sprawdzic czy dla integerow a,b,c,d zachodzi
    >
    > a*b == c*d


    int NWD(int a, int b)
    {
    int c;
    while (b != 0)
    {
    c = a % b;
    a = b;
    b = c;
    }
    return a;
    }

    int Signs(int x, int y)
    {
    if (x == 0 || y == 0)
    return 0;
    if ((x<0 && y<0) || (x>0 && y>0))
    return 1;
    return -1;
    }

    BOOL Check_ABeqCD(int a, int b, int c, int d)
    {
    int s1 = Signs(a, b);
    int s2 = Signs(c, d);

    if (s1 != s2)
    return FALSE;

    if (s1 == 0)
    return TRUE;

    a = a > 0 ? a : -a;
    b = b > 0 ? b : -b;
    c = c > 0 ? c : -c;
    d = d > 0 ? d : -d;

    int nwd = NWD(b, c);
    b /= nwd;
    c /= nwd;

    if (a/c==d/b && a%c==0 && d%b==0)
    return TRUE;

    return FALSE;
    }

strony : 1 . [ 2 ]


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: