View Single Post
Sitat av Dyret Vis innlegg
Og der har du nesten løsningen! Funksjonen teller antall bits i tallet som sendes inn. Grunnen til at det fungerer er at om du summerer alle mulige måter å shifte tallet på (i += i<0 + i shifter i mot venstre) så får du enten ~0 eller -1 ganger antall bits satt i i. Trekkes dette fra k så får du antall bits. Ikke heng deg så mye opp i det med overflowen, ettersom hvor lang tid den tar er fast gitt størrelsen på en integer - og for å telle antall bits må man telle alle sammen. På 32bits arkitektur kan du se for deg at loopen kjøres et konstant antall ganger.

Denne var kanskje i overkant vanskelig, men det er en interessant oppgave.
Vis hele sitatet...
Veldig interesan oppgave faktisk. Krevde en del tenking litt out of the box med tanke på hvordan datamaskinen behandler tall. Dette er jo og faktisk ganske viktig kunskap. Dette ga meg faktisk noe "enkelt" å bryne meg på. Og selv om jeg ikke helt tar den 100% enda, har jeg fått en gofd forklaring så kommer til å se litt på den så jeg forstår de siste tignene jeg er litt usikker på. Jeg vil uansett si jeg var inne på det, selv med overflowen. Jeg overså bare noe vesentlig.

----------------------

Legger ved den nye oppgaven, denne er i forhold til den forrige ganske enkel. Slik at iv får ting i litt varierende vanskelighetsgrader
c++:

Kode

#include <iostream>
using namespace std;

int A(int b)
{
    if (b<=1)
        return 1;
    else
        return (b*A(b-1));
}

int main()
{
    cout << A(4) << endl;
}
Sist endret av etse; 15. april 2010 kl. 18:30.