Деление числа на разряды циклом C++

Никак не могу понять в чем проблема написанного алгоритма. По идее после ввода пятизначного числа, допустим 12345, должна выводиться последовательность этих чисел по порядку, но проиходит что-то непонятноевведите сюда описание изображения

#include <iostream>
#include <cmath>

int main()
{
    setlocale(LC_ALL,"RUS");
    std::cout << "Деление числа на разряды\n";
    int number;
    std::cout << "\nВведите пятизначное число: ";
    std::cin >> number;
    if ((number>9999) && (number<=99999)){
        for (int i = 0; i < 5; i++)
        std::cout << i+1 << "-я цифра = " << (number/static_cast<int>(pow ( 10 , ( 4 - i ))))%10 << std::endl;
    }
    else
    {
        std::cout << "\nВы ввели неверное число!\n";
    }
    system("pause");
}

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

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

Вероятно, в вашем случае pow возвращает не 100, как задумывалось, а значение с плавающей запятой 99.(9)

Можно вместо pow использовать переменную, которая на начало цикла будет иметь значение 10000 и при каждой итерации будет делиться на 10. Тогда будет достаточно делить число на эту переменную с последующим получением остатка от деления на 10 от полученного значения:

#include <iostream>

int main()
{
    setlocale(LC_ALL,"RUS");
    std::cout << "Деление числа на разряды\n";
    int number;
    std::cout << "\nВведите пятизначное число: ";
    std::cin >> number;
    int factor = 10000;
    if ((number>9999) && (number<=99999)){
        for (int i = 0; i < 5; i++) {
            std::cout << i+1 << "-я цифра = " << (number/factor)%10 << std::endl;
            factor/=10;
        }
    }
    else
    {
        std::cout << "\nВы ввели неверное число!\n";
    }
    system("pause");
    return 0;
}

Кроме того, этот код будет работать быстрее, так как применяется простая арифметическая операция: деление целого числа.

→ Ссылка