jag har en liten grej som är ungefär som pelles problem. Roger, Hyfsat kort, men är det för långt skyller jag allt på delphi :) Andreas, din var inte riktigt vad jag var ute efter , du kollade bara om det var ett udda eller jämnt tal. Jag tror Martin vinner... Martin,veckans nöt #2
skriv en så kort rutin som möjligt (i valfritt språk) som returnerar true på 1,2,4,8,16,32,64,.... osv (binära värden) men false på allt annat.
//RogerSv: veckans nöt #2
Då du inte anger vilken typ av tal det ska handla om så utgick jag från en helt vanlig <b>int</b> och då kan man göra på följande sätt
[C#]
public bool IsEven(int tal)
{
return (((tal >> 32) & 1 ) == 0);
}
Supersnabb eftersom den använder bitoperatorer (shift och and).
<b>EDIT: </b> Ärch tänkte juh helt fel... sååå trött =) Tänkte på jämn&udda.. såg sen vad du skrev.
Sv: veckans nöt #2
function test(a:real):boolean;
begin
if a <= 1 then
result := (a=1)
else
result := test(a/2);
end;
Sv: veckans nöt #2
det jag ville var att kolla 2 potenser... tex 1 , 2 ,4 ,8 , 16, 32 , 64, 128 , 256 , 512 osv
//RogerSv: veckans nöt #2
public bool IsEven(int tal)
{
return (((tal >> 32) & 1 ) == 0);
}
konstig funktion. Vad den gör är att den kollar om bit 33 är 0.
Ett tal är ju jämt om den mista biten är 0. dvs (tal & 1) == 0
Sv: veckans nöt #2
min lösning var :
bool powerof2(int number)
{
double power=Math.Log (number,2);
return power == (int)power;
}
där jag kollade om exponenten är ett heltal..
men att and'a och inte blanda in flyttal är ju helt klart snyggare :)
//Roger
Sv: veckans nöt #2
<b>konstig funktion. Vad den gör är att den kollar om bit 33 är 0.
Ett tal är ju jämt om den mista biten är 0. dvs (tal & 1) == 0</b>
JapP! Du skall helt enkelt glömma bort min kod. Jag satt och tänkte på att kolla den sista
biten (tvåkomplement) men det är juh om talet är negativt eller positivt. Sen gjorde jag juh
fel - men jag var som sagt inte speciellt vaken ;)