• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Suma liczb calkowitych rozpoczynajacych sie liczba 12 32 4

Object Storage Arubacloud
0 głosów
252 wizyt
pytanie zadane 10 lutego 2017 w C i C++ przez orlicki12 Początkujący (450 p.)
Potrzebuje napisac program liczacy sume N poczatkowych liczb calkowitych rozpoczynajacych sie liczba 12, 32, 4.  Ale nie wiem jak sformulowac warunek zeby program rozpoznal taka liczbe.
komentarz 10 lutego 2017 przez Adrian Spora Mądrala (5,100 p.)
Podaj jakiś przykład, bo róznie to można interpretować.

6 odpowiedzi

+1 głos
odpowiedź 10 lutego 2017 przez mokrowski Mędrzec (155,460 p.)
#include <iostream>
#include <limits>
#include <cmath>

using namespace std;

// Wyczytanie liczby.. zakładam że całkowitej
long read_value() {
    long value;
    for(;;) {
        cout << "Podaj liczbę całkowitą: ";
        cin >> value;
        if(cin) {
            break;
        }
        cerr << "To co wprowadziłeś, nie jest liczbą całkowitą.\n";
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
    }
    return value;
}

// Pobranie określonej ilości cyfr znaczących z początku
long get_first_digits(long value, size_t count) {
    unsigned significant_digits = ceil(log10(value));
    if(significant_digits < count) {
        // Jeśli liczba cyfr do zwrócenia jest większa niż dostępna to.. 
        return 0;
    }
    return value / pow(10, significant_digits - count);
}

// Sprawdzenie warunku czy zaczyna się od 12, 32 lub 4
bool check_value(long value) {
    bool condition = false;
    long first_digits = get_first_digits(value, 2);
    if(first_digits == 12 or first_digits == 32) {
        condition = true;
    }
    first_digits = get_first_digits(value, 1);
    if(first_digits == 4) {
        condition = true;
    }
    return false;
}
        

int main() {
    long value = read_value();
    cout << "Liczba " << value
        << (check_value(value) ? "": " nie")
        << " zaczyna się od cyfr 12 lub 32 lub 4.\n";
}

 

0 głosów
odpowiedź 10 lutego 2017 przez orlicki12 Początkujący (450 p.)
Przyklad liczby ? Np 1243 rozpoczyna sie od 12.
0 głosów
odpowiedź 10 lutego 2017 przez 10kw10 Pasjonat (22,880 p.)
Mozesz zamienic na stringa i sprawdzic 2 pierwsze znaki.
komentarz 10 lutego 2017 przez orlicki12 Początkujący (450 p.)
Profesorowi raczej chodzi o to by bylo za pomoca if moze jakos modulo wykorzystac ?
0 głosów
odpowiedź 10 lutego 2017 przez mokrowski Mędrzec (155,460 p.)
Nie wiem czy chcesz odpowiedzi bezpośredniej czy naprowadzenia na rozwiązanie?

Jeśli naprowadzenia to masz następujące wyjścia:

1. Przetworzyć wprowadzaną liczbę na ciąg znaków i zbadać czy początkowe to cyfry odpowiadające kryteriom.

2. Zainteresować się funkcją log10(...) która tak naprawdę po zaokrągleniu "do góry", da liczbę cyfr znaczących we wprowadzanej liczbie. A dalej to już dzielenie całkowite przez odpowiednią potęgę 10'ki i sprawdzenie czy wynikiem jest 12 czy 32 czy 4'ry..

Jak nie wiesz o co chodzi, daj znać...
komentarz 10 lutego 2017 przez orlicki12 Początkujący (450 p.)
Moglbys napisac bezposrednio drugi sposob ?
0 głosów
odpowiedź 10 lutego 2017 przez morele123 Gaduła (4,790 p.)
No jak ma być z ifem i modulo, to zapisujesz liczbę do jakiejś zmiennej, a następnie zmniejszasz jej wielkość poprzez dzielenie na 10 do rozmiaru 2 i wsprawdzasz, czy 1 liczba to 4, jak nie to sprawdzasz, czy ta liczba to 12 lub 32 i tyle.
0 głosów
odpowiedź 10 lutego 2017 przez mokrowski Mędrzec (155,460 p.)

Czasem właśnie o to chodzi profesorom żeby odpowiedź wcale nie była prosta :-/ A taka może być. 

Kompilować zgodnie z C++11

#include <iostream>
#include <algorithm>
#include <iterator>
#include <string>

using namespace std;

int main() {
    size_t n;       // Ilość liczb
    long sum{};     // Suma liczb spełniających kryteria   
    long value;     // Pomocnicza dla wczytywanych wartości
    cout << "Podaj ile ma być liczb: ";
    cin >> n;
    // Tu możesz sprawdzić oczywiście czy wprowadzono poprawnie dane
    // podobnie jak w moim poprzednim przykładzie. Także w pętli.
    for(size_t i = 0; i < n; ++i) {
        cin >> value;
        string strValue = to_string(value);
        if((0 == strValue.find("12")) or (0 == strValue.find("43")) or (0 == strValue.find("4"))) {
            sum += value;
        }
    }
    cout << "Suma " << n << " liczb spełniających kryteria to " << sum << endl;
}

 

Podobne pytania

0 głosów
1 odpowiedź 1,165 wizyt
pytanie zadane 30 marca 2017 w C i C++ przez Undisputed Gaduła (3,040 p.)
0 głosów
1 odpowiedź 335 wizyt
pytanie zadane 27 marca 2017 w C i C++ przez Kamil Duljas Użytkownik (990 p.)
0 głosów
1 odpowiedź 6,103 wizyt
pytanie zadane 7 lutego 2017 w JavaScript przez ilendil Początkujący (250 p.)

92,568 zapytań

141,422 odpowiedzi

319,629 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...