БлогNot. C++: извлечь любую цифру из числа

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 просмотра]


теги: c++ алгоритм

показать комментарии (2)