Видимо, мы просто добавляем произведение всех цифр к текущему номеру. Это прекрасно работает и для 1, 2, 4, 8 (например, 4 = 2 + (2)
), поэтому не требуется никакой специальной обработки. Однако, очевидно, нам нужно игнорировать нули, иначе мы не изменим после 102 больше ...
Таким образом, мы можем немного упростить алгоритм:
unsigned int number = 1; // start value
std::cout << number; // OK, would require special handling for n == 0...
while(n--) // you could ask the user to input n or just set it to 10
// (I consider this variant a bit more elegant)
{
unsigned int product = 1;
unsigned int tmp = number;
// now iterate as long as you have more digits!
while(tmp)
{
unsigned int modulo = tmp % 10;
tmp /= 10;
// neat little trick: if modulo != 0, comparison is false, which is
// converted to 0, which is neutral for OR operation; otherwise, we
// get 0 | 1, which is neutral for multiplication...
product *= modulo | (modulo == 0);
}
number += product;
std::cout << ", " << number;
}
Это будет работатьхорошо даже для тарифа больше номеров, чем только первые десять (пока не произойдет переполнение продукта или сумма ...).