Загрузка данных


#include <iostream>
#include <fstream>

// =========================================================================
// ZADANIE 3.1
// Funkcja wyznaczająca "nieparzysty skrót" liczby n.
// Operuje wyłącznie na liczbach całkowitych, bez użycia napisów (string).
// =========================================================================
long long nieparzysty_skrot(long long n) {
    long long m = 0;       // Tu budujemy nasz skrót
    long long pozycja = 1; // Mnożnik pozycji dziesiętnej (1, 10, 100, ...)

    while (n > 0) {
        long long cyfra = n % 10; // Pobieramy ostatnią cyfrę
        if (cyfra % 2 != 0) {     // Jeśli cyfra jest nieparzysta
            m = m + cyfra * pozycja;
            pozycja = pozycja * 10;
        }
        n = n / 10; // Usuwamy ostatnią cyfrę
    }
    return m;
}

// =========================================================================
// FUNKCJE POMOCNICZE
// =========================================================================

// Funkcja pomocnicza do Zadania 3.2
// Zwraca true, jeśli liczba składa się WYŁĄCZNIE z cyfr parzystych
bool tylko_parzyste(long long n) {
    while (n > 0) {
        if ((n % 10) % 2 != 0) {
            return false; // Znaleziono przynajmniej jedną cyfrę nieparzystą
        }
        n = n / 10;
    }
    return true;
}

// Algorytm Euklidesa do Zadania 3.3
// Wyznacza Największy Wspólny Dzielnik (NWD) dwóch liczb
long long nwd(long long a, long long b) {
    while (b != 0) {
        long long temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

// =========================================================================
// GŁÓWNY PROGRAM
// =========================================================================
int main() {
    // Optymalizacja operacji wejścia/wyjścia (przydatne na maturze)
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(NULL);

    // --- ROZWIĄZANIE ZADANIA 3.2 ---
    std::ifstream plik_wej_32("skrot.txt");
    std::ofstream plik_wyj_32("wyniki3_2.txt");

    if (plik_wej_32.is_open() && plik_wyj_32.is_open()) {
        long long liczba;
        int licznik_brak_skrotu = 0;
        long long najwieksza_brak_skrotu = -1;

        while (plik_wej_32 >> liczba) {
            if (tylko_parzyste(liczba)) {
                licznik_brak_skrotu++;
                if (liczba > najwieksza_brak_skrotu) {
                    najwieksza_brak_skrotu = liczba;
                }
            }
        }

        plik_wyj_32 << licznik_brak_skrotu << "\n";
        plik_wyj_32 << najwieksza_brak_skrotu << "\n";

        plik_wej_32.close();
        plik_wyj_32.close();
        std::cout << "Zadanie 3.2 zostalo pomyslnie wykonane. Wyniki zapisano w pliku wyniki3_2.txt\n";
    } else {
        std::cerr << "Blad: Nie udalo sie otworzyc plikow dla zadania 3.2!\n";
    }

    // --- ROZWIĄZANIE ZADANIA 3.3 ---
    std::ifstream plik_wej_33("skrot2.txt");
    std::ofstream plik_wyj_33("wyniki3_3.txt");

    if (plik_wej_33.is_open() && plik_wyj_33.is_open()) {
        long long liczba;

        while (plik_wej_33 >> liczba) {
            long long skrot = nieparzysty_skrot(liczba);
            
            // Sprawdzamy czy NWD liczby i jej skrótu wynosi 7
            if (nwd(liczba, skrot) == 7) {
                plik_wyj_33 << liczba << "\n";
            }
        }

        plik_wej_33.close();
        plik_wyj_33.close();
        std::cout << "Zadanie 3.3 zostalo pomyslnie wykonane. Wyniki zapisano w pliku wyniki3_3.txt\n";
    } else {
        std::cerr << "Blad: Nie udalo sie otworzyc plikow dla zadania 3.3!\n";
    }

    return 0;
}