none
Luhn Algoritmasıyla İlgili RRS feed

  • Soru

  • string kartno;

     int tekler=0, ciftler = 0;
     for (int i = 0; i < 16; i++)
     {
     if (i % 2 == 0) ciftler +=
    basamak_topla(2*int.Parse(kartno[i].ToString()));
     else tekler += int.Parse(kartno[i].ToString());
     }

     if ((tekler+ciftler)%10==0) Console.WriteLine("Doğru Kart Numarası");
     else Console.WriteLine("Yanlış Kart Numarası");
     Console.ReadLine();
     }
            }
     static int basamak_topla(int sayi)
     {
     int toplam = 0;
     while (sayi != 0)
     {
     toplam += sayi % 10;
     sayi /= 10;
     }
     return toplam;
     }

    Kodda hiçbir sıkıntı yok

    fakat sonda oluşturduğumuz fonksiyonda toplam ve sayıyla yaptığı işlemlerin mantığını anlayamadım.Normalde algoritmada çift indisli sayıları 2yle çarpıyodu tamam sıkıntı yok.Ama bu çift rakamlıysa 16 gibi 1+6 yapıyo fakat fonksiyona göre modunu aldığımızda veya 10 a böldüğümüzde aynı sonuç çıkıyo 7 sonucu veriyo bi şekilde ama nasıl? Mantığını kavrayamadım sadece

     
    22 Kasım 2017 Çarşamba 20:28

Yanıtlar

  • 10 a göre mod alırsan birler basamağındaki rakamı alırsın.

    234 % 10 = 4  *   gibi...

    Bir tam sayıyı 10 a bölersen aşağı yuvarlayarak yine bir tam sayı elde edersin

    234 / 10 = 23 

    ilk işlemi tekrar yap

    23 % 10 = 3 *

    sonra diğerini

    23 / 10 = 3

    devam

    2 % 10 = 2 *

    devam

    2 / 10 = 0.2 bu while döngüsünün şartından kırılıyor

    yıldız koyduklarımızı topla = 4 + 3 + 2 = 9

    22 Kasım 2017 Çarşamba 20:58