С++ В чем проблема в цикле?

#include <cstdio>
#include <clocale>
#include <cmath>
#include <typeinfo>
using namespace std;
int main()
{
    int example, numbers, digit, example2;
    numbers = 0;
    setlocale(0, "rus");
    printf("Введите число:");
    scanf_s("%d", &example);
    example2 = example;
    while (example2 > 0)   /*Определяем кол-во цифр в массиве*/
    {
        example2 = example2 / 10;
        numbers++;
        printf("%d", numbers);
    }
    while (example > 0)
    {
        digit = example / 10 * numbers;
        example /= 10 * numbers;
        numbers -= 1;
        if (digit == 0 or digit == 5)
        {
            continue;
        }
        else
        {
            printf("%d\n", digit);
        }
    }

В чем может быть проблема , выводит непонятное число?

}


    

[Задание1


Ответы (2 шт):

Автор решения: Zhihar

а зачем вы так усложнили то?

можно решить несколькими способами

способ 1:

  1. перевести число в строку

  2. пройти по строке и вывести только те символы, которые не равны '0' и '5'

     // получить от пользователя число
     int value;
     std::cin >> value;
    
     // перевести число в строку
     std::string text = std::to_string(value);
    
     // пройти по всем символам строки и вывести только отличные от '0' и '5'
     for (const char letter : text) {
         if ((letter != '0') && (letter != '5'))
             std::cout << letter;
     }
    

способ 2

  1. удаляя 0 и 5 сформировать перевернутое число

  2. вывести цифры числа в обратном порядке

     // получить от пользователя число
     int value;
     std::cin >> value;
    
     // сформировать число без 0 и 5, в котором цифры расположены в обратном опрядке
     int compact = 0;
    
     while (value) {
         if ((value % 10 != 0) && (value % 10 != 5))
             compact = compact * 10 + value % 10;
    
         value /= 10;
     }
    
     // вывести цифры сформированного числа в восстановленном порядке (в обратном порядке от обратного порядка расположения цифр)
     while (compact) {
         std::cout << compact % 10;
    
         compact /= 10;
     }
    
→ Ссылка
Автор решения: Harry

Так не проще?

unsigned long long int n, r = 0, p = 1;
scanf("%llu", &n);
while(n)
{
    int d = n%10;
    n /= 10;
    if (d == 0 || d == 5) continue;
    r += d*p;
    p *= 10;
}
printf("%llu\n",r);

P.S. Делал на С, как и вы, несмотря на то, что у вас тэг С++...

→ Ссылка