C++: извлечь любую цифру из числа
При нумерации цифр числа справа налево, начиная с единицы, для извлечения из натурального числа n
цифры под номером d
достаточно выполнить код вида n%10d/10d-1
Пример законченного приложения (демка, код не "экономичный"):
#include <iostream> #include <cmath> #include <Windows.h> using namespace std; int number_of_digits(unsigned long int n) { int d = 0; while (n) { n /= 10; d++; } return d; } int expand_digit(unsigned long int n, int d) { return (n % (unsigned long int)pow(10, d)) / (unsigned long int)pow(10, d - 1); } int main() { unsigned long int n; int d; SetConsoleCP(1251); SetConsoleOutputCP(1251); //Для Studio cout << "Введите натуральное число: "; cin >> n; cout << "Введено число:" << n << endl; int digits = number_of_digits(n); do { cout << "Введите номер извлекаемой цифры (1-" << digits << ", нумерация справа налево): "; cin.clear(); cin.sync(); cin >> d; } while (d<1 || d>digits); cout << "Получена цифра: " << expand_digit(n, d) << endl; cin.sync(); cin.get(); return 0; }
Ну а "извлечь из целого числа все цифры по порядку" - задача очень простая, и решить можно множеством способов, например:
#include <iostream> #include <vector> using namespace std; vector <int> getdigits(int num) { //Получаем вектор из цифр числа vector<int> res; do { res.push_back(num % 10); num /= 10; } while (num > 0); reverse(res.begin(), res.end()); return res; } int main() { vector <int> v = getdigits (1234); for (int i = 0; i < v.size(); i++) cout << v.at(i) << " "; return 0; }
Или даже просто:
#include <iostream> #include <vector> using namespace std; void print_each_digit(int x) { if (x >= 10) print_each_digit(x / 10); int digit = x % 10; cout << digit << ' '; } int main() { print_each_digit (1234); return 0; }
19.11.2013, 22:53 [18892 просмотра]