Necati Ergin Hocamın kendi sayfasında bulunan çalışma sorularını ve cevaplarını burada yanıtlamaya çalıştım. Sorulara buradan ulaşabilirsiniz.
Kendisine gönderilen bir tamsayının 10‘luk sayı sisteminde Harshad sayısı olup olmadığını test eden is_harshad isimli işlevi tanımlayınız.
int is_harshad(int val);
İşleve gönderilen değer 10’luk sayı sisteminde bir Harshad sayısı ise işlev sıfır dışı bir değere değil ise işlev sıfır değerine geri döner.
Tanımladığınız işlevi kullanarak ilk 100 Harshad sayısını standart çıkış akımına yazdıran bir C programı yazınız.
Harshad sayısı nedir?
Eğlence matematiğinde Harshad Sayı (veya Niven Sayı) rakamları toplamına tam bölünebilen tamsayılara denir. Harshad özelliğini sağlayan sayma tabanına n dersek sayılar n-Harshad (ya da n-Niven) olarak da söylenirler. Hindistanlı matematikçi D. R. Kaprekar tarafından tanımlanmışlardır. “Harshad” kelimesi Sanskritçe harṣa (eğlence) + da (vermek), kelimelerinin bileşiminden “eğlenceli” anlamındadır. “Niven Sayı” tabiri ise Ivan M. Niven tarafından 1977‘de sayma teorisi ile ilgili yayınlanmış olan makaleye dayandırılmıştır.
Örnekler:
18 sayısı 10 tabanında (sayma sisteminde) Harshard sayıdır. Çünkü rakamları olan 1 ve 8‘in toplamı 9‘dur (1+8=9), ve 18 sayısı 9‘a tam bölünür. (18/9=2 ve 2 bir tamsayıdır)
1729 sayısı 10‘luk sayma sisteminde bir Harshard sayıdır çünkü rakamları toplamı olan 19‘a tam bölünür (1729=19*91)
19 sayısı 10‘luk sayma sisteminde bir Harshard sayı değildir, çünkü rakamları toplamı 10‘dur (1+9=10) ve (19/10=1.9 ve 1.9 tam sayı olmadığından) 19 10‘a tam bölünmez.
10‘luk sayma sisteminde Harshard sayıları dizisi şöyledir:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 18, 20, 21, 24, 27, 30, 36, 40, 42, 45, 48, 50, 54, 60, 63, 70, 72, 80, 81, 84, 90, 100, 102, 108, 110, 111, 112, 114, 117, 120, 126, 132, 133, 135, 140, 144, 150, 152, 153, 156, 162, 171, 180, 190, 192, 195, 198, 200 …
Kaynak : wikipedia
Yanıt:
#include <stdio.h>
int is_harshad(int val)
{
int temp = val;
int sum_digit = 0;
while (temp)
{
sum_digit += temp % 10;
temp /= 10;
}
return ((val % sum_digit) == 0);
}
int main()
{
int harshad_cnt = 0;
int val = 1;
while (harshad_cnt < 100)
{
if (is_harshad(val))
{
printf("%d ", val);
++harshad_cnt;
}
++val;
}
return 0;
}
Hiç yorum yok:
Yorum Gönder
Son Ütücü