Zadanie z c++ - ile jest liczb pechowych

0

Mam takie zadanie, że muszę wyliczyć ile jest liczb pechowych nie przekraczjących wejścia.
Przy czym liczba pechowa:

  • zawiera conajmniej raz w swoim zapisie 13 np. 134 albo 9213
  • suma jej cyfr wynosi 13 czyli 139 albo 49
    Wejście może mieć liczbe od 1 do 10000000000000
    Przykładowe wejście 1000. Wyjście 2 (139, 913)
    wiem jak to wczytać ale nie wiem jak obliczyć ile tych liczb jest
0

Składasz to z, w miarę oczywistych funkcji:

long sumDigits(long n) {
    long s = 0;
    while (n != 0) {
        s += n % 10;
        n /= 10; 
    }
    return s;
}

int isThirteen(long n) {
    if (n / 10 == 0) return 0;
    std::vector<long> v{};
    while (n != 0) {
        v.push_back(n % 10);
        n /= 10;
    }
    for (size_t i = 0; i <v.size() - 1; ++i){
        if (v[i] == 3 && v[i+1] == 1) return 1;
    }
    return 0;
}

int isBadLuckNumber(long n) {
    return isThirteen(n) && sumDigits(n) == 13;
}

int badLuckNumbersToN(long n){
    int cnt = 0;
    for (long i = 0; i <= n; ++i){
        if (isBadLuckNumber(i))
            ++cnt;
    }
    return cnt;
}

int main(int argc, char **argv){    
    cout << badLuckNumbersToN(1000); // -> 2
    cout << "\n";
    return 0;
}

Pole do popisu w optymalizacji:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0