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¹⁸.
#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.
After processing the final digit of 730 once, what are the extracted digit and remaining number?
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.
#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
Mark complete when you can explain it yourself.