Çözüldü Girilen Sayının 2'nin Kuvveti Olup Olmadığını Gösteren C++ Kodu

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

Zireael14

Kilopat
Katılım
6 Temmuz 2017
Mesajlar
1.436
Çözümler
12
Yer
Kadıköy
C++:
#include <iostream>
#include <clocale>

using namespace std;

int sayi;

bool ikiKuvvet(int);
int us(int, int);

int main() {

    setlocale(LC_ALL, "Turkish");
  
    cout << "Sayı giriniz.";
    cin >> sayi;
    cout << ikiKuvvet(sayi);

}

int us(int taban, int derece) {

    int sonuc = 1;

    for (int i = 0; i < derece; i++) {
        sonuc *= taban;
    }

    return sonuc;

}

bool ikiKuvvet(int sayi) {

    for (int i = 0; us(2, i) < sayi; i++) {

        if (sayi % us(2, i) != 0) {
            return false;
        }

        else
            return true;
    }

}

Kullanıcının girdiği sayının, 2'nin bir kuvveti olup olmadığını gösteren bir program yazıyorum. Üs alma fonksiyonu da bool türünden değer döndüren fonksiyonu da elle yazmamız istendi. Ancak kodum çalışmıyor, hatamı bulamadım. 1 ve 0 hariç ne girersem gireyim true döndürüyor program.
Hatamı düzelttim. Kodun yeni hâli:

C++:
#include <iostream>
#include <clocale>

using namespace std;

int sayi;
int kuvvetMi;

bool ikiKuvvet(int);
int us(int, int);

int main() {

    setlocale(LC_ALL, "Turkish");
   
    cout << "Sayı giriniz.";
    cin >> sayi;
    cout << ikiKuvvet(sayi);

}

int us(int taban, int derece) {

    int sonuc = 1;

    for (int i = 0; i < derece; i++) {
        sonuc *= taban;
    }

    return sonuc;

}

bool ikiKuvvet(int sayi) {

    for (int i = 1; us(2, i) < sayi; i++) {

        kuvvetMi = 1;

        if (sayi % us(2, i) != 0) {
            kuvvetMi = 0;
        }

        else
            kuvvetMi = 1;
    }

    if (kuvvetMi) {
        return true;
    }

    else
        return false;

}
 
Son düzenleme:
Çözüm
Sadece 2'nin kuvveti ise aklıma başta bitset kullanmak geldi. Bu tip bir şekilde de yapılabilir.

Kod:
#include <iostream>
#include <bitset>

#define N 32

int main() {
    auto num{ 0 };
    std::cout << "sayi gir: ";
    std::cin >> num;
    std::bitset<N> bitnum{ (unsigned long long)num };
    
    if (bitnum.count() == 1) {
        std::cout << "2\'nin kuvveti.\n";
    }
    else {
        std::cout << "2\'nin kuvveti degil.\n";
    }
    
    return 0;
}
Sadece 2'nin kuvveti ise aklıma başta bitset kullanmak geldi. Bu tip bir şekilde de yapılabilir.

Kod:
#include <iostream>
#include <bitset>

#define N 32

int main() {
    auto num{ 0 };
    std::cout << "sayi gir: ";
    std::cin >> num;
    std::bitset<N> bitnum{ (unsigned long long)num };
    
    if (bitnum.count() == 1) {
        std::cout << "2\'nin kuvveti.\n";
    }
    else {
        std::cout << "2\'nin kuvveti degil.\n";
    }
    
    return 0;
}
 
Çözüm
Sadece 2'nin kuvveti ise aklıma başta bitset kullanmak geldi. Bu tip bir şekilde de yapılabilir.

Kod:
#include <iostream>
#include <bitset>

#define N 32

int main() {
    auto num{ 0 };
    std::cout << "sayi gir: ";
    std::cin >> num;
    std::bitset<N> bitnum{ (unsigned long long)num };
  
    if (bitnum.count() == 1) {
        std::cout << "2\'nin kuvveti.\n";
    }
    else {
        std::cout << "2\'nin kuvveti degil.\n";
    }
  
    return 0;
}
Bu fonksiyonu bilmiyordum çalışayım biraz. Teşekkür ederim.
 

Yeni konular

Geri
Yukarı