Загрузка данных
#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;
}