Suma și produsul cifrelor

Bază~12 min13 pași

De ce contează?

La un joc de zaruri aduni scorurile de pe fiecare față: 3, 1, 4 → total 8. Exact același pattern se aplică cifrelor unui număr: parcurgi fiecare cifră și o adaugi la un acumulator. Suma cifrelor este unul dintre cele mai frecvente exerciții de concurs și se rezolvă în cinci rânduri de cod.

Ideea de acumulator

Un acumulator este o variabilă care colectează un rezultat parțial. La fiecare pas adaugi sau înmulțești cifra curentă cu acumulatorul existent.

OperațieInițializareActualizare
Sumăsuma = 0suma += cifra
Produsprodus = 1produs *= cifra
Observația-cheie

Inițializarea contează! Pentru sumă folosești 0 (elementul neutru al adunării), pentru produs folosești 1 (elementul neutru al înmulțirii). Confuzia dintre 0 și 1 este una dintre cele mai frecvente greșeli la concurs — și una dintre cele mai ușor de evitat dacă înțelegi de ce.

Algoritmul

Aceeași structură ca la extragerea cifrelor, cu un acumulator în plus. Urmărește pentru n = 3042:

n = 3042, suma = 0, produs = 1

cifra = 2: suma = 2,  produs = 2
cifra = 4: suma = 6,  produs = 8
cifra = 0: suma = 6,  produs = 0
cifra = 3: suma = 9,  produs = 0

Observă cum cifra 0 nu schimbă suma, dar anulează produsul imediat.

Implementare C++

#include <iostream>
using namespace std;

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

    if (n == 0) {
        cout << "Suma: 0, Produs: 0" << endl;
        return 0;
    }

    int suma = 0, produs = 1;
    int temp = n;

    while (temp > 0) {
        int cifra = temp % 10;
        suma += cifra;       // aduna cifra la acumulator
        produs *= cifra;     // inmulteste cifra la produs
        temp /= 10;
    }

    cout << "Suma: " << suma << ", Produs: " << produs << endl;
    return 0;
}

Exemplu: Input 3042Suma: 9, Produs: 0

Complexitate

CazTimpSpațiu
Număr cu d cifreO(log n)O(1)
Greșeli frecvente

Greșeala 1: Inițializezi produs = 0 în loc de produs = 1. Rezultatul va fi mereu 0, indiferent de cifre.

Greșeala 2: Modifici n direct în buclă și ai nevoie de valoarea originală după. Salvează-o în temp înainte de buclă.

Greșeala 3: Nu tratezi n = 0 separat. Bucla while nu rulează, deci produsul rămâne 1 — incorect matematic. Tratează explicit cazul n == 0.

Greșeala 4: Overflow la produs pentru numere cu cifre mari. 9^9 = 387.420.489 intră în int, dar 9^10 depășește. Folosește long long dacă n poate fi mare.

Întrebarea 1 / 3

Care este suma cifrelor lui 3042?