Çözüldü C++ çarpma sorusu

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

RSK06

Hectopat
Katılım
29 Aralık 2020
Mesajlar
2.285
Çözümler
4
Daha fazla  
Cinsiyet
Erkek
Yapmak istediğim mesela bir kart numarası: 3004005801420.
Sayının sondan ikinci basamağından başlayarak diğer her basamağı 2 ile çarpmak istiyorum ama 2'şer atlayacağım yani 2'den sonra 4, sonra 8 sonra 0 vs.
Ne kullanmam gerektiğini anlamadım sondan 2. basamak ile nasıl başlayacağım?
 
Çözüm
Kod:
#include <iostream>
#include <string>

int main()
{
    std::string in = "3004005801420";
    int digits = in.length() - 1;

    for (int i = digits - 1; i >= 0; i -= 2) {
 
        int d = in.at(i) - '0';
        std::cout << d << " * 2 = " << d * 2 << std::endl;
    }
}
2 * 2 = 4
1 * 2 = 2
8 * 2 = 16
0 * 2 = 0
4 * 2 = 8
0 * 2 = 0
Math kütüphanesindeki pow() ile kolayca yapabilirsin, soruların bir zorluğu yok. Ayrıca istenilen C kodu, C++ diye yazılmış başlığa, hangisi doğrusu?

İlk 25 basamağını istiyor, döngüye sokmayı da bildiğini varsayıyorum.
 
Math kütüphanesindeki pow() ile kolayca yapabilirsin, soruların bir zorluğu yok. Ayrıca istenilen C kodu, C++ diye yazılmış başlığa, hangisi doğrusu?

İlk 25 basamağını istiyor, döngüye sokmayı da bildiğini varsayıyorum.

C++ olarak istiyorum, tam olarak ne ilk 25 basamağını istiyor?
pow() daha önce hiç kullanmadım bakmam lazım.
 
Aklıma tek bir şey takıldı. Diyelim sayımız 9 bunu 8 ile çarptık sonuç 72. 72'yi 9'un yerine mi yazacağız?

Luhn algoritması ile yapmam lazım soruyu atıyorum,

For the sake of discussion, let's first underline every other digit, starting with the number's second-to-last digit:

4003600000000014

Okay, let's multiply each of the underlined digits by 2:

1•2 + 0•2 + 0•2 + 0•2 + 0•2 + 6•2 + 0•2 + 4•2

That gives us:

2 + 0 + 0 + 0 + 0 + 12 + 0 + 8
4003600000000014, burada nasıl ikişer gideceğimi çözsem sondan anlayacağım aslında.
 
Soruya göre 0, 1, 2, 3, 4 olabiliyor basamaklar. Tek olan basamaklar olsa diğerleri sadece sıfır olsa daha büyük sayılar olabilirdi ama hiç sanmıyorum.
String yap. Sonra cast edip integer iken işlemini yap. Sonra yerine yaz.


Soruyu yanlış anlamışım. Sizden o basamakların toplamını istiyor.
Direkt string yapıp ikişer ikişer ikişer basamakları toplayın, en son 2 ile çarpın.
 
Son düzenleme:
Kod:
#include <iostream>
#include <string>

int main()
{
    std::string in = "3004005801420";
    int digits = in.length() - 1;

    for (int i = digits - 1; i >= 0; i -= 2) {
 
        int d = in.at(i) - '0';
        std::cout << d << " * 2 = " << d * 2 << std::endl;
    }
}
2 * 2 = 4
1 * 2 = 2
8 * 2 = 16
0 * 2 = 0
4 * 2 = 8
0 * 2 = 0
 
Çözüm
Kod:
#include <iostream>
#include <string>

int main()
{
 std::string in = "3004005801420";
 int digits = in.length() - 1;

 for (int i = digits - 1; i >= 0; i -= 2) {

 int d = in.at(i) - '0';
 std::cout << d << " * 2 = " << d * 2 << std::endl;
 }
}

İn. At(i) - '0' tam olarak ne acaba?
Yani - 0 neden?
 

Geri
Yukarı