Grade 9 · Digits of a numberCitește în română

Printing the digits in their order in the number

Original: Afișarea cifrelor în ordinea din număr

O(n)C++1734 lines1 example

The idea

With n % 10 the digits come out from right to left. To print them from left to right, we first compute p = the largest power of 10 not greater than n. Then the current digit is n / p % 10, and p is divided by 10 at every step.

Original description (Romanian)

Cu n % 10 cifrele ies de la dreapta la stânga. Ca să le afișăm de la stânga la dreapta, calculăm întâi p = cea mai mare putere a lui 10 cel mult egală cu n. Apoi cifra curentă este n / p % 10, iar p scade de 10 ori la fiecare pas.

Complexity
O(k), where k is the number of digits of n
Grade
Grade 9 (Clasa a IX-a)

Examples

Example 1

Input

4072

Expected output

4 0 7 2

The code

Comments are in Romanian, as in the original collection. Edit freely: you can reset at any time.

cifrele-in-ordinea-din-numar.cpp
/*
 * Titlu: Afișarea cifrelor în ordinea din număr
 * Clasa: 9
 * Capitol: Cifrele unui număr
 * Descriere: Cu n % 10 cifrele ies de la dreapta la stânga. Ca să le afișăm de
 *            la stânga la dreapta, calculăm întâi p = cea mai mare putere a lui
 *            10 cel mult egală cu n. Apoi cifra curentă este n / p % 10, iar p
 *            scade de 10 ori la fiecare pas.
 * Complexitate: O(k), unde k este numărul de cifre ale lui n
 *
 * Exemplu
 * Intrare: 4072
 * Ieșire: 4 0 7 2
 */
#include <iostream>
using namespace std;

int main()
{
    long long n, p = 1;
    cin >> n;
    while (p * 10 <= n)
    {
        p = p * 10;
    }
    while (p > 0)
    {
        cout << n / p % 10 << ' ';
        p = p / 10;
    }
    cout << '\n';
    return 0;
}

Runs on a real g++ (C++17, -O2) through Compiler Explorer. Keep runs short; there's a time limit.