Деление числа на разряды циклом 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 шт):
Вероятно, в вашем случае 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;
}
Кроме того, этот код будет работать быстрее, так как применяется простая арифметическая операция: деление целого числа.