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

Jak zapisać cyfry

Object Storage Arubacloud
0 głosów
247 wizyt
pytanie zadane 14 lutego 2023 w C i C++ przez Mikołaj195 Nowicjusz (120 p.)
edycja 14 lutego 2023 przez Mikołaj195
#include <iostream>

using namespace std;

int main()
{
    cout << "Wpisz liczbe" << endl;
    int zm;
    cin>>zm;
    if(zm>=10)
    {
       zm=zm%=10; //brak elementu sumy i zapisania cyfr

    }
    if(zm<10) {

        zm=zm%=3;
    }
        if(zm==0) {
        cout<<"Liczba podzielna przez 3"<<endl;
    }else {
    cout<<"Liczba jest niepodzielna przez 3"<<endl;
    }

    return 0;
}

Witam, mam problem, bo muszę zrobić program sprawdzający podzielność przez 3 w C++ poprzez dzielenie przez 10 i sumowanie reszt. Gdzie program może przechować wyniki reszt oraz jak je później do siebie dodać?

Z góry dziękuję za odpowiedzi

komentarz 14 lutego 2023 przez Iei Obywatel (1,950 p.)
Przechowywać wyniki reszt w zmiennej, a dodać to po prostu dodać? Masz już jakiś kod?
komentarz 14 lutego 2023 przez Mikołaj195 Nowicjusz (120 p.)
edycja 14 lutego 2023 przez Mikołaj195
#include <iostream>

using namespace std;

int main()
{
    cout << "Wpisz liczbe" << endl;
    int zm;
    cin>>zm;
    if(zm>=10)
    {
       zm=zm%=10; //brak elemntu sumy i zapisania cyfr

    }
    if(zm<10) {

        zm=zm%=3;
    }
        if(zm==0) {
        cout<<"Liczba podzielna przez 3"<<endl;
    }else {
    cout<<"Liczba jest niepodzielna przez 3"<<endl;
    }

    return 0;
}

Mam taki kod, dopiero zaczynam więc są pewnie błędy. Mam error przy else, niestey nie wiem dlaczego.

komentarz 14 lutego 2023 przez tangarr Mędrzec (154,860 p.)
Twoim zadaniem jest napisać program sumujący cyfry w podanej liczbie.
Dla liczby 123456789 obliczasz sumę 1+2+3+4+5+6+7+8+9=45
Na końcu sprawdzasz czy uzyskana suma jest podzielna przez 3.
Ja osobiście nie używałbym do tego operacji liczenia reszty z dzielenia przez 3 tylko powtarzał algorytm aż do uzyskania wartości jednocyfrowej. Wtedy można sprawdzić czy suma jest równa 3 lub 6 lub 9.
komentarz 14 lutego 2023 przez Mikołaj195 Nowicjusz (120 p.)
Wiem, resztę prawie zrobiłem. Brakuje tylko tej sumy i na moje (dość początkujące) oko powinno zadziałać. Co do ostatniej sugestii, to właśnie tak próbuje zrobić:

1. Dzielę przez 10 i jeśli suma będzie l. złożona to powtarzam, aż do uzyskania jednej cyfry.

2. Następnie sprawdzam czy reszta z dzielenia jest 0 i wyświetlam odpowiednie komunikaty.

Wiesz jakiego kodu mogę użyć do sumy reszt dzielenia przez 10? Mam nadzieję, że jeśli to dodam to reszta będzie działać.
komentarz 14 lutego 2023 przez tangarr Mędrzec (154,860 p.)

Wydaje mi się, że cały czas nie rozumiesz jak ma działać ten algorytm.
Pozwól, że opiszę ci na konkretnym przykładzie. Potem porównaj to sobie ze swoim pomysłem.

liczba = 123
suma = 0

wynik_dzielenia = liczba/10 = 123/10 = 12
reszta_dzielenia = liczba%10 = 123%10 = 3
suma = suma + reszta_dzielenia = 0 + 3 = 3

liczba = wynik_dzielenia = 12

wynik_dzielenia = liczba/10 = 12/10 = 1
reszta_dzielenia = liczba%10 = 12%10 = 2
suma = suma + reszta_dzielenia = 3 + 2 = 5

liczba = wynik_dzielenia = 1

wynik_dzielenia = liczba/10 = 1/10 = 0
reszta_dzielenia = liczba%10 = 1%10 = 1
suma = suma + reszta_dzielenia = 5 + 1 = 6

liczba = wynik_dzielenia = 0 

kończymy algorytm
suma = 6
sprawdzamy czy suma jest liczbą podzielną przez 3

 

2 odpowiedzi

0 głosów
odpowiedź 14 lutego 2023 przez polandonion Mądrala (7,040 p.)
edycja 14 lutego 2023 przez polandonion

posłużyć do tego może std::vector. Zadeklaruj globanie taki wektor i za każdym razem, gdy dostajesz się do erszty z dzielenia przez 10. wrzuć ją do tego wektora. Jednoczesnie możesz sumować te reszty w jednej pętli.

Sposób użycia w twoim problemie:

Deklaracja wektora:

vector <int> v; // nie musi byc int, moze byc short, char itp.

Funkcja wrzucająca reszty z dzielenia przez 10 do wektora oraz wypisująca te reszty

void f(int liczba) {
	int suma = 0;

	while (liczba != 0) {
		v.push_back(liczba % 10);
		suma = suma + liczba % 10; // suma += liczba % 10

		liczba = liczba / 10; // liczba /= 10
	}

	if (suma % 3 == 0)
		// liczba jest podzielna przez 3
	else
		// nie jest podzielna przez 3

	// wypisanie tych reszt moze sie odbyc w taki sposob:

	for (auto &x : v)
		cout << x << ' ';

	/* jesli chcesz wypisac te reszty w porzadku rosnacym
       przed wypisaniem tych reszt uzyj metody sort() */

    sort(v.begin(), v.end());

    /* jesli chcesz w porzadku malejacym dodatkowo po
       sort() uzyj reverse() w taki sposob */

    reverse(v.begin(), v.end());
}

Tutaj przykładowy pełny program. Niech posłuży ci ku nauce:

#include <iostream> // cin oraz cout
#include <vector> // vector
#include <algorithm> // sort() oraz reverse()

using namespace std;

vector <int> v;

void f(int liczba) {
	int suma = 0;
 
    while (liczba != 0) {
        v.push_back(liczba % 10);
        suma = suma + liczba % 10; // suma += liczba % 10
 
        liczba = liczba / 10; // liczba /= 10
    }

    // wypisanie czy liczba jest podzialna
    if (suma % 3 == 0)
        cout << "Liczba podzielna przez 3" << endl;
    else
        cout << "Liczba niepodzielna przez 3" << endl;

    // wypisanie reszt w porzadku wrzucania do wektora:
    for (auto &x : v)
        cout << x << ' ';
    cout << endl;

    // wypisanie reszt w porzadku rosnacym:
    sort(v.begin(), v.end());
    for (auto &x : v)
        cout << x << ' ';
   	cout << endl;

    // wypisanie reszt w porzadku malejacym:
    reverse(v.begin(), v.end());
    for (auto &x : v)
        cout << x << ' ';
}

int main() {
	int liczba;
	cin >> liczba;

	f(liczba);
}

 

komentarz 16 lutego 2023 przez TOWaD Mądrala (6,000 p.)

Pewnie dużo wolniej, ale mniej kodu

#include <iostream>
#include <numeric>
#include <string>

using namespace std;

int main()
{
    std::string s;
    std::cin>>s;
    auto chtoi=[](unsigned int i, char ch){return i+ch-'0'; };
    while(s.size()>1){
      s=std::to_string(accumulate(s.begin(),s.end(),0,chtoi));
    } 
    cout<<((s[0]-'0')%3?"Nie":"Tak");
    return 0;
}

https://stackoverflow.com/questions/73669615/how-can-i-add-up-the-values-of-the-individual-digits-in-a-string

0 głosów
odpowiedź 14 lutego 2023 przez tangarr Mędrzec (154,860 p.)
Wystarczy jedna zmienna.
Sumuj w niej poszczególne cyfry. Jeżeli wynik sumowania jest większy niż 9 to wykonaj algorytm sumowania cyfr dla tej wartości. Powtarzaj algorytm aż do uzyskania wartości jednocyfrowej.
komentarz 14 lutego 2023 przez Mikołaj195 Nowicjusz (120 p.)
edycja 14 lutego 2023 przez Mikołaj195
Dziękuję, ale nie wiem, jak mogę to zrobić, dopiero zaczynam, więc nie wiem jak dodać do siebie te wyniki.
komentarz 14 lutego 2023 przez tangarr Mędrzec (154,860 p.)
Zacznij od słownego opisania algorytmu. Najlepiej w postaci listy kroków. Dopiero gdy będziesz wiedział co program ma robić będziesz mógł go napisać.
komentarz 14 lutego 2023 przez Mikołaj195 Nowicjusz (120 p.)
Mam już taki opis. Zacząłem pisać program  i tego mi właśnie brakuje.

Podobne pytania

0 głosów
1 odpowiedź 221 wizyt
pytanie zadane 19 października 2023 w C i C++ przez Jerzy Użytkownik (930 p.)
0 głosów
1 odpowiedź 257 wizyt
0 głosów
1 odpowiedź 3,664 wizyt
pytanie zadane 13 lipca 2019 w C i C++ przez magda_19 Gaduła (3,080 p.)

92,620 zapytań

141,474 odpowiedzi

319,815 komentarzy

62,005 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!

...