Bu soruyu şu bölümde buldum:Bir sayı karesi bulma
Çarpma kullanmadan verilen bir tamsayı karesini döndüren bir işlev yazın. Buna
Çözüm
public static int sq(int n){
int i = n;
int sq = 0;
int count = 0;
while(i > 0){
if((i & 1) == 1){
sq += n << count;
}
i = i >> 1;
count++;
}
return sq;
}
Ben fonksiyonu ne yaptığını anlamaya, ancak bu çalışma neden olduğunu anlamıyorum.
Bunun neden bir çalışan çözüm olduğunu açıklayan var mı?
Bu sadece ikili çarpmanın basit (ve verimsiz) bir uygulamasıdır - hangi kısımda zorluk çekiyorsunuz? İlkokulda "uzun el" çarpmasını nasıl öğrendiğinizi tekrar düşünün. –
Ayrıca, kodun buggy olduğunu unutmayın - n <0 için başarısız. –