Obliczenie czy cyfry w liczbie są nieparzyste, oraz wyliczenie iloczynu tych cyfr.

0

Witam, chcę napisać program który po wypisaniu liczby z klawiatury, określi czy wszystkie cyfry są nieparzyste lub też nie.
Dodatkowo ma on zliczać iloczyn tych cyfr.

Próbowałem kombinować w ten sposób, niestety iloczyn wylicza jakieś bajeczne cyfry, a instrukcje if nie zawsze działają poprawnie;

Przykładowo, dla liczby 1111 pokaże ze wszystkie są nieparzyste, ale dla 2121 że też są nieparzyste.

Co robię źlę?:/

#include <iostream>
using namespace std;

int main()

{
    string liczba;

    cout << "Podaj czterocyfrowa liczbe:";
    cin >> liczba;

    int x, y, z, t;

    x = liczba[0];
    y = liczba[1];
    z = liczba[2];
    t = liczba[3];

    if ((x % 2 == 0) && (y % 2 == 0) && (z % 2 == 0) && (t % 2 == 0)) // Srednio dziala, przykladowo, dla liczby 1111 pokaze ze
    // wszystkie sa nieparzyste, ale dla 2121 że też są nieparzyste
    {
        cout << "\nNie Wszystkie cyfry sa nieparzyste";
    }
    else {

        cout << "\nWszystkie cyfry sa nieparzyste";
    }

    int iloczyn = x * y * z * t;

    cout << "\nIloczyn cyfr tej liczby wynosi: " << iloczyn;
    return 0;
}
3

Zmień && na || bo w tym kodzie co masz musiałbyś mieć wszystkie cyfry parzyste aby warunek był true.

Pamiętaj również, że kiedy wprowadzisz '1' jako string to tak naprawdę dostajesz wartość 49. Musiałbyś przypisać znak do zmiennej poprzez funkcję atoi()

4

Wiesz jak działa koniunkcja logiczna? Twój if będzie prawdziwy wyłącznie gdy wszystkie cztery liczby będą parzyste.

Lepiej zrób to tak:

auto is_odd = [](char c){ return (c - '0') % 2; };
bool all_odd = std::all_of(liczba.cbegin(), liczba.cend(), is_odd);
bool at_least_one_odd = std::any_of(liczba.cbegin(), liczba.cend(), is_odd);
bool none_odd = std::none_of(liczba.cbegin(), liczba.cend(), is_odd);

https://wandbox.org/permlink/5cJhONHE3fgfchbJ

0
kq napisał(a):

Wiesz jak działa koniunkcja logiczna? Twój if będzie prawdziwy wyłącznie gdy wszystkie cztery liczby będą parzyste.

Lepiej zrób to tak:

auto is_odd = [](char c){ return (c - '0') % 2; };
bool all_odd = std::all_of(liczba.cbegin(), liczba.cend(), is_odd);
bool at_least_one_odd = std::any_of(liczba.cbegin(), liczba.cend(), is_odd);
bool none_odd = std::none_of(liczba.cbegin(), liczba.cend(), is_odd);

https://wandbox.org/permlink/5cJhONHE3fgfchbJ

kompletnie nie rozumiem tego kodu ^^ nie mój level raczej

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