С++ В чем проблема в цикле?
#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);
}
}
В чем может быть проблема , выводит непонятное число?
}
[
Ответы (2 шт):
Автор решения: Zhihar
→ Ссылка
а зачем вы так усложнили то?
можно решить несколькими способами
способ 1:
перевести число в строку
пройти по строке и вывести только те символы, которые не равны
'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
удаляя 0 и 5 сформировать перевернутое число
вывести цифры числа в обратном порядке
// получить от пользователя число 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. Делал на С, как и вы, несмотря на то, что у вас тэг С++...