программа правильно работает только с числами, содержащими не более 9 разрядов
Только учусь программированию. Решила попробовать написать программу, которая считает, сколько разрядов в числе, и выводит, чему равен каждый из разрядов. Программа работает с числами, в которых до 9 разрядов включительно, но если я ввожу число с 10 и более разрядами, то она выводит некорректный результат. Как это объяснить или как исправить? 
#include <iostream>
using namespace std;
int main()
{
setlocale(0, "Russian");
int n{}, k{}, nc{}, r{};
cout << "деление числа на разряды \n";
cout << "введите целое число: ";
cin >> n;
nc = n;
while (nc > 0) {
k ++;
nc = nc / 10;
}
cout << "в вашем числе " << k << " разряд";
for (int i = k; i > 0; i--) {
r = n % 10;
cout << i << "-ый разряд равен " << r << "\n";
n = n / 10;
}
}
Ответы (2 шт):
Десятизначное число не влезает в int. До 18 знаков- long long
И скобки фигурные ни к чему лишние
То число которое Вы ввели слишком большое для переменной n.
Следовательно, происходит переполнение переменной.
Диапазон int'a — от -2 147 483 648 до 2 147 483 647. Чтобы эго расширить, нужно добавить спецификатор long long.
Тогда диапазон будет от −9 223 372 036 854 775 808 до 9 223 372 036 854 775 807.
Кстати, есть альтернативный вариант решения Вашей задачи:
#include <Windows.h>
#include <iostream>
#include <string>
using namespace std;
int main()
{
setlocale(0, "Russian");
long long int n{};
string txt_num;
cout << "деление числа на разряды \n";
cout << "введите целое число: ";
cin >> n;
txt_num = to_string(n);
cout << "в вашем числе " << txt_num.length() << " разряд" << endl;
for (int i = 0; i < txt_num.length(); i++)
{
cout << i << "-ый разряд равен " << txt_num[i] << '\n';
}
system("pause");
}
Так хитрее и быстрее. Просто нужно сконвертировать в string.