Kapat

Kaprekar Sayısı Nedir?

Anasayfa
Faydalı Bilgiler Kaprekar Sayısı Nedir?

Hint matematikçisi D.R. Kaprekar tarafından 1949 yılında keşfedilen 6174 sayısı, bu matematikçinin şerefine Kaprekar sayısı olarak adlandırılmaktadır. Kaprekar sayısının elde edilmesi aşağıdaki şekildedir.

  • Farklı (veya hepsi tekrarlanmayan) rakamlardan oluşan dört basamaklı sayı alınır (örneğin 1746)
  • Bu sayının rakamlarından oluşan en büyük ve en küçük sayılar elde edilir. (7641 ve 1467)
  • Büyük sayıdan küçük sayı çıkarılır ve bu işlem en fazla 7 defa tekrarlanarak sonuçta her zaman 6174 sayısı elde edilir.
  • 7641 – 1467 = 6174
  • Şimdi rastgele seçtiğimiz sayılarla bu işlemleri yapalım…

 

Örnek 1 : 5644 sayısı

Adım 1: 6544 – 4456 = 2088

Adım 2: 8820 – 0288 = 8532

Adım 3 : 8532 – 2358 = 6174

 

Örnek 2 : 7652 sayısı

Adım 1 : 7652 – 2567 = 5085

Adım 2 : 8550 – 0558 = 7992

Adım 3 : 9972 – 2799 = 7173

Adım 4 : 7731 – 1377 = 6354

Adım 5 : 6543 – 3456 = 3087

Adım 6 : 8730 – 0378 = 8352

Adım 7 : 8532 – 2358 = 6174

Aşağıda kendi yazmış olduğum kaprekar sayı işlemlerini yapan programın kaynak kodları (C++) bulunuyor. Siz de kodları herhangi bir C++ derleyicisi kullanarak çalıştırıp deneyebilirsiniz.

#include<iostream>
using namespace std;
void BuyukBulma(int []); //Fonksiyon prototipi

int main(){

int dizi[4],buyukSayi,kucukSayi,sonuc,sayi; //gerekli degiskenlerin tanimlanmasi

for(int i=0;i<1;i++){
cout<<“Dort basamakli bir sayi giriniz (Elemanlarindan en az bir tanesi farkli olacaktir.):”; //kullanicidan sayi alinmasi
cin>>sayi;
if(sayi>9999 || sayi<1000 || sayi==1111 || sayi==2222 || sayi==3333 || sayi==4444 || sayi==5555 || sayi==6666 || sayi==7777 || sayi==8888 || sayi==9999){
i=-1; //ayni elemanlardan olusan sayilarin kaprekar sabiti olmadigi icin islem tekrarlaniyor.
}

}
for(int i=0;i<4;i++){ //sayinin en buyuk ve en kucugunu olusturmak icin diziye aktarilmasi
dizi[i]=sayi%10;
sayi/=10;
}

for(int i=0;i<7;i++){ //maksimim 7 adimda kaprekar sabitine ulasmak icin gerekli olan dongu
BuyukBulma(dizi); //girilen elemanlari buyukten kucuge siralamak icin fonksiyon cagirilir

buyukSayi=((dizi[0]*1000)+(dizi[1]*100)+(dizi[2]*10)+(dizi[3]*1)); //elemanlar basamak sistemiyle 4 basamakli sayi haline donusur
kucukSayi=((dizi[3]*1000)+(dizi[2]*100)+(dizi[1]*10)+(dizi[0]*1)); //kucuk sayi ise tam tersi seklinde olacagi icin islemin tersi yapilir

sonuc=buyukSayi-kucukSayi;
cout<<buyukSayi<<“-“<<kucukSayi<<“=”<<sonuc<<“\n”;

if(sonuc==6174){ //sonuc kaprekar sabitine esitse donguden cikiyor
i=7;
}
if(sonuc<1000){
cout<<“Sonuc 3 basamakli oldugu icin islem devam edemez.”;
i=7;
}
if(sonuc!=6174){ //sonuc kaprekar sabitine esit degilse olusan sayinin basamaklari tekrar diziye gonderilip islemler tekrarlaniyor
dizi[0]=sonuc%10;
sonuc/=10;
dizi[1]=sonuc%10;
sonuc/=10;
dizi[2]=sonuc%10;
sonuc/=10;
dizi[3]=sonuc%10;
sonuc/=10;
}

}
return 0;
}

void BuyukBulma(int x[]){ //dizi elemanlarini buyukten kucuge siralamak icin fonksiyon

int maksimum;
int temp;

for(int i=0;i<3;i++){ //kacinci buyuk eleman araniyor diye gerekli dongu
maksimum=i;
for(int j=i+1;j<4;j++){ //elemanlar arasinda karsilastirma yapmak icin gerekli dongu
if(x[j]>x[maksimum])
maksimum=j; //eleman buyukse degismiyor
}
if(i!=maksimum){ //eleman buyuk degilse yer degistirme islemi yapiliyor
temp=x[i];
x[i]=x[maksimum];
x[maksimum]=temp;
}
}

}

PROGRAMDAN ÇIKTI GÖRÜNTÜSÜ

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.