Подтвердить что ты не робот

Как разбить int на его цифры?

Как я могу разбить int в С++ на его одиночные числа? Например, я хотел бы разделить 23 на 2 и 3.

4b9b3361

Ответ 1

Учитывая число 12345:

5 - 12345 % 10
4 - 12345 / 10 % 10
3 - 12345 / 100 % 10
2 составляет 12345 / 1000 % 10
1 12345 / 10000 % 10

Я не буду предоставлять полный код, так как это, безусловно, выглядит как домашнее задание, но я уверен, что вы получите шаблон.

Ответ 2

Экстрактор цифр в обратном порядке (например, для 23 будет 3 и 2):

while (number > 0)
{
    int digit = number%10;
    number /= 10;
    //print digit
}

Экстрактор цифр нормального порядка (например, для 23 будет 2 и 3):

std::stack<int> sd;

while (number > 0)
{
    int digit = number%10;
    number /= 10;
    sd.push(digit);
}

while (!sd.empty())
{
    int digit = sd.top();
    sd.pop();
    //print digit
}

Ответ 3

передайте его в строку или char [] и зациклируйте на ней

Ответ 4

Следующее выполнит трюк

void splitNumber(std::list<int>& digits, int number) {
  if (0 == number) { 
    digits.push_back(0);
  } else {
    while (number != 0) {
      int last = number % 10;
      digits.push_front(last);
      number = (number - last) / 10;
    }
  }
}

Ответ 5

Простым ответом на этот вопрос может быть:

  1. Прочитать номер "n" от пользователя.
  2. Использование While Loop Make It Not Not Zero.
  3. Возьмите модуль 10 из номера "n".. Это даст вам его последнюю цифру.
  4. Затем разделите число "n" на 10. Это удаляет последний номер числа "n", поскольку в int decimal part опущен.
  5. Отобразить номер.

Я думаю, это поможет. Я использовал Simple Code Like:

#include <iostream>
using namespace std;
int main()
{int n,r;

    cout<<"Enter Your Number:";
    cin>>n;


    while(n!=0)
    {
               r=n%10;
               n=n/10;

               cout<<r;
    }
    cout<<endl;

    system("PAUSE");
    return 0;
}

Ответ 6

классический трюк заключается в использовании modulo 10: x% 10 дает вам первую цифру (т.е. цифру единиц). Для других вам нужно сначала делить (как показано многими другими сообщениями)

Вот небольшая функция, чтобы получить все цифры в векторе (что вам, похоже, нужно делать):

using namespace std;
vector<int> digits(int x){
    vector<int> returnValue;
    while(x>=10){
        returnValue.push_back(x%10);//take digit
        x=x/10; //or x/=10 if you like brevity
    }
    //don't forget the last digit!
    returnValue.push_back(x);
    return returnValue;
}

Ответ 7

Объявите массив и сохраните отдельные цифры в массиве, как этот

int num, temp, digits = 0, s, td=1;
int d[10];
cout << "Enter the Number: ";
cin >> num;
temp = num;
do{
    ++digits;
    temp /= 10;
} while (temp);

for (int i = 0; i < digits-1; i++)
{
    td *= 10;
}

s = num;
for (int i = 0; i < digits; i++)
{
    d[i] = s / td %10;
    td /= 10;

}

Ответ 8

Начните с наивысшей мощности десяти, которая вписывается в int на вашей платформе (для 32 бит int: 1.000.000.000) и выполняет целое деление на нее. Результат - самая левая цифра. Вычтите этот результат, умноженный на делитель от исходного числа, затем продолжите ту же игру со следующей меньшей мощностью десяти и итерации до тех пор, пока не достигнете 1.

Ответ 9

Вы можете просто использовать последовательность операций x/10.0f и std:: floor, чтобы иметь "математический подход". Или вы также можете использовать boost:: lexical_cast (the_number), чтобы получить строку, а затем вы можете просто сделать the_string.c_str() [i] для доступа к отдельным символам ( "строковый подход" ).

Ответ 10

Я не обязательно рекомендую это (более эффективно работать с числом, а не преобразовывать его в строку), но это легко и работает:)

#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>

#include <boost/lexical_cast.hpp>

int main()
{
    int n = 23984;
    std::string s = boost::lexical_cast<std::string>(n);
    std::copy(s.begin(), s.end(), std::ostream_iterator<char>(std::cout, "\n"));
    return 0;
}

Ответ 11

int n;//say 12345
string s;
scanf("%d",&n);
sprintf(s,"%5d",n);

Теперь вы можете получить доступ к каждой цифре с помощью s[0], s[1] и т.д.

Ответ 12

Вы можете подсчитать, сколько цифр вы хотите напечатать первым.

#include <iostream>
#include <cmath>
using namespace std;

int main(){
int number, result, counter=0, zeros;

do{
    cout << "Introduce un numero entero: ";
  cin >> number;

  }while (number < 0);

  // We count how many digits we are going print
  for(int i = number; i > 0; i = i/10)
        counter++;

   while(number > 0){

       zeros = pow(10, counter - 1);

       result = number / zeros;
       number = number % zeros;
       counter--;

       //Muestra resultados
       cout << " " << result;
   }
   cout<<endl;

}

Ответ 13

На основе ответа icecrime я написал эту функцию

std::vector<int> intToDigits(int num_)
{
    std::vector<int> ret;
    string iStr = to_string(num_);

    for (int i = iStr.size() - 1; i >= 0; --i)
    {
        int units = pow(10, i);
        int digit = num_ / units % 10;
        ret.push_back(digit);
    }   

    return ret;
}

Ответ 14

    int power(int n, int b) {
    int number;
    number = pow(n, b);
    return number;
}


void NumberOfDigits() {
    int n, a;
    printf("Eneter number \n");
    scanf_s("%d", &n);
    int i = 0;
    do{
        i++;
    } while (n / pow(10, i) > 1);
    printf("Number of digits is: \t %d \n", i);

    for (int j = i-1; j >= 0; j--) {
        a = n / power(10, j) % 10;
        printf("%d \n", a);
    }
}

int main(void) {
    NumberOfDigits();
}

Ответ 15

int n = 1234;
std::string nstr = std::to_string(n);
std::cout << nstr[0]; // nstr[0] -> 1

Я думаю, что это самый простой способ.

Нам нужно использовать функцию std :: to_string() для преобразования нашего int в строку, чтобы он автоматически создавал массив с нашими цифрами. Мы можем получить к ним доступ просто используя index - nstr [0] покажет 1;

Ответ 16

Используй стандартный, Люк!

int reverse_int(int x) 
{
    string str = to_string(x);
    reverse(begin(str), end(str));

    try
    {
        if(x<0)
            x = -stoi(str);
        else
            x = stoi(str);
    }
    catch(...) { return 0; }

    return x;
}

Ответ 17

for (size_t i = 0; i < sizeof(num); ++i, num>>1)
{
  std::cout << (num&1) << "\n";
}

Вы не указали базу.