Clasa a IX-a · Cifrele unui numărRead in English

Cifra de control în C++

În engleză: Check digit (digital root)

O(n)C++1740 de linii2 exemple

Ideea

Cifra de control se obține înlocuind numărul cu suma cifrelor lui, în mod repetat, până când rămâne o singură cifră (de exemplu 99999 -> 45 -> 9). Același rezultat dă formula 1 + (n - 1) % 9, pentru n > 0.

Descrierea în engleză

The check digit is obtained by repeatedly replacing the number with the sum of its digits until a single digit remains (for example 99999 -> 45 -> 9). The formula 1 + (n - 1) % 9 gives the same result for n > 0.

Complexitate
O(k), unde k este numărul de cifre ale lui n (după prima sumă rămân foarte puține cifre)
Clasa
Clasa a IX-a (Grade 9)

Exemple

Exemplul 1

Intrare

99999

Ieșire așteptată

9
Exemplul 2

Intrare

1234

Ieșire așteptată

1

Codul C++

Codul complet, cu comentarii în română. Îl poți modifica liber și îl poți reseta oricând.

cifra-de-control.cpp
/*
 * Titlu: Cifra de control
 * Clasa: 9
 * Capitol: Cifrele unui număr
 * Descriere: Cifra de control se obține înlocuind numărul cu suma cifrelor lui,
 *            în mod repetat, până când rămâne o singură cifră
 *            (de exemplu 99999 -> 45 -> 9). Același rezultat dă formula
 *            1 + (n - 1) % 9, pentru n > 0.
 * Complexitate: O(k), unde k este numărul de cifre ale lui n (după prima sumă
 *               rămân foarte puține cifre)
 *
 * Exemplu
 * Intrare: 99999
 * Ieșire: 9
 *
 * Exemplu
 * Intrare: 1234
 * Ieșire: 1
 */
#include <iostream>
using namespace std;

int main()
{
    long long n;
    cin >> n;
    while (n >= 10)
    {
        long long suma = 0;
        while (n > 0)
        {
            suma = suma + n % 10;
            n = n / 10;
        }
        n = suma;
    }
    cout << n << '\n';
    return 0;
}

Rulează pe un g++ adevărat (C++17, -O2) prin Compiler Explorer. Programele trebuie să se termine repede: există o limită de timp.