Sumowanie cyfr

0

Witam pisze program ktory w petli prosi o podanie dodatniej liczby calkowitej i zatrzymuje sie kiedy jest 0. Następnie program wypisuje te z wczytanych liczb, dla ktorej suma cyfr jest najwieksza(oraz te sume cyfr). Czyli chodzi o to ze jak podam liczbe 25 to jej suma to 7 i nie wiem jak napisac zeby sumowaly sie te cyfry i zeby wypisywal te podane liczby. Przykladowa kompilacja:

Podana liczba to: 23
Podana liczba to: 45
Podana liczba to: 94
Najwieksza suma cyfr to 13 dla liczby 94.

#define POL

int main()
{
	int a = 0;
#if defined POL
	do {
		cout << "Podaj jakas dodatnia liczbe calkowita ";
		cin >> a;
		
	} while (a != 0);
#endif
#if defined ENG
	do {
		cout << "Write a positive integer ";
		cin >> a;

	} while (a != 0);
#endif
2

dziel za pomoca operatora % przez 10 (dzieki temu bedziesz miec znak jednosci) pozniej dziel liczbe przez 10 i wykonaj dopoki liczba nie jest zero. Wtedy bedziesz mogl sumowac cyfry w liczbie

0

Możesz też liczby pobierać jako string. I wtedy od razu zobaczysz, na jakiej pozycji znajduje się jaka cyfra. Sposób fasadina jest szybszy, jeśli chodzi o czas procesora, natomiast trudniejszy w implementacji. Tzn. fasadin podał jak to rozwiązać dla liczb dwucyfrowych. Jeśli będziesz miał liczby 3-cyfrowe i większe, to wtedy będziesz się musiał bardziej napocić. Mój sposób jest gorszy pod względem optymalizacji (jest wolniejszy od rozwiązania fasadina), natomiast prostszy w implementacji. I tu nie ma różnicy, czy w liczbie jest jedna cyfra, czy 50.

A no i jeszcze jedna kwestia z tego kodu - nie wiedziałem, że można tak okrutnie napisać aplikację wielojęzykową. Pod tym względem to najgorszy kod jaki widziałem, a może i nawet na świecie :) Stringi w aplikacji wielojęzykowej bierze się z zasobów (osobne dllki albo np. pliki xml).

Ostatecznie można by zrobić coś takiego:

#ifdef POL
std::wstring enterValue = L"Podaj liczbę";
#elif defined(ENG)
std::wstring enterValue = L"Enter number";
#else
#error "Unknown language"
#endif

//a potem w kodzie:
std::wcout(enterValue);

Oczywiście to też złe rozwiązanie, ale duuuużo lepsze od Twojego.

0

Ja to rozumiem tak:

{
    int num;
    int sum = 0;
    std::cin >> num;
    while (num > 0) {
        sum += num % 10;
        num /= 10;
    } 
}

Stringa też trzeba liczyć w pętli.

0

Mialem dopiero 4 lekcje z c++ i to moja pierwsza stycznosc z informatyka i powiem wam ze nic nie rozumiem z tego co mowicie.

0

W kodzie nad twoim postem jedyną rzeczą której możesz nie znać jest %, a liczy on resztę z dzielenia. += oznacza "za to co po lewej podstaw sumę lewej i prawej strony"

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