Learning pathOriginal reference
Lesson 11 of 12

Take a number apart, one digit at a time

Use remainder and division to process decimal digits, including zero.

Extract, process, remove

For a nonnegative integer, n % 10 gives its final decimal digit and n / 10 removes that digit. For 5072, the digits arrive in the order 2, 7, 0, 5. This is right to left, not the original written order.

Use a working copy when the original input is needed later. The remainder is always from 0 through 9 here, so explicitly converting it to int is safe. The example accepts 0 ≤ n ≤ 10¹⁸.

C++23
#include <iostream>

int main() {
    long long n = 0;
    std::cin >> n;
    long long remaining = n;
    int sum = 0;
    do {
        int digit = static_cast<int>(remaining % 10);
        sum += digit;
        remaining /= 10;
    } while (remaining > 0);
    std::cout << sum << '\n';
    return 0;
}

Zero is a digit too

The integer 0 has one decimal digit. A while (n > 0) body would never run for zero. A do-while processes one digit before checking whether any remain, which handles both the digit sum and the digit count naturally.

An extracted zero does not mean processing is finished: 730 % 10 is 0, but 730 / 10 leaves 73. Stop according to the remaining number, not the extracted digit.

Numeric input does not preserve formatting

Reading the decimal input 0072 as an integer stores 72. Counting four written characters or preserving leading zeros requires a string, which comes next session.

The number of repetitions is the number of decimal digits, rather than the numeric value itself. For a fixed long long range this is small; do not replace a digit scan with a loop counting all the way to n.

Pause & predict

After processing the final digit of 730 once, what are the extracted digit and remaining number?

Choose an answer
Try it yourself

Turn the idea into code

Count the decimal digits of 0 ≤ n ≤ 10¹⁸. Print 1 for zero and 4 for 5072.

Give me a hint

Increment a counter each time you remove one digit. Ensure one iteration happens for zero.

Show the explained solution

A do-while handles zero without a separate branch. Each iteration removes exactly one digit and increments the count once.

C++23
#include <iostream>

int main() {
    long long n = 0;
    std::cin >> n;
    int count = 0;
    do {
        ++count;
        n /= 10;
    } while (n > 0);
    std::cout << count << '\n';
    return 0;
}

Your notes

Ready for the next idea?

Mark complete when you can explain it yourself.

From a problem to a programIdentify the input, output, and constraints, then translate a small plan into C++.Variables, types, and remembered valuesChoose a representation, initialize it, and understand what assignment really changes.Arithmetic without surprisesPredict division and remainder, widen before multiplication, and format decimal answers.Conditions and logical decisionsBuild exclusive categories, combine comparisons, and protect operations with short-circuit logic.Optional: other ways to chooseRecognize switch for exact choices and the conditional operator for choosing a value.For loops: make repetition preciseTrace initialization, condition, body, and update—and avoid an extra iteration.While, do-while, and stopping rulesChoose a loop from its stopping condition and read the exact input format.Break, continue, and early answersDistinguish leaving a loop from skipping one iteration, without losing required input.Five patterns worth understandingUse sums, counts, best-so-far candidates, products, and flags to process a stream.Nested loops: rows and columnsTranslate a shape into two loop roles and count the total work.Take a number apart, one digit at a timeUse remainder and division to process decimal digits, including zero.Multiple cases and a debugging mindsetCombine the patterns, isolate each case, and test the boundaries that can break your idea.Arrays: give every value a placeUnderstand indices, initialization, capacity, active length, and the first safe array loop.Scan, count, search, and compareDistinguish values from positions and preserve the exact tie rule a problem asks for.Change a sequence without losing itUpdate, copy, compare, reverse, and inspect neighbours using the correct bounds.Matrices: think in two coordinatesTraverse tables, total rows and columns, inspect diagonals, and protect grid neighbours.Characters become stringsSeparate characters from numbers, then safely inspect and edit managed text.Read the text the problem actually givesChoose words or full lines, preserve empty cases, and reset only the state that needs it.Scan text: count, filter, transformBuild a result from matching characters without losing leading zeros or skipping shifted text.Join, compare, and find textLearn content comparison, lexicographical order, substring counts, and the not-found sentinel.