Преобразовать целое число в массив

Я хотел бы преобразовать целое число в массив, чтобы оно выглядело следующим образом:

int number = 123456 ;
int array[7] ;

с результатом:

array[0] = 1 
array[1] = 2
...
array[6] = 6

Ответ 1

Возможно, лучшим решением будет обратная работа:

123456 % 10 = 6

123456 / 10 = 12345

12345 % 10 = 5

12345 / 10 = 1234

Ответ 2

просто используйте модульную арифметику:

int array[6];
int number = 123456;
for (int i = 5; i >= 0; i--) {
    array[i] = number % 10;
    number /= 10;
}

Ответ 3

Вы можете извлечь последнюю цифру номера следующим образом:

int digit = number % 10;
number /= 10;

Обратите внимание, что вы также должны проверить, является ли number положительным. Другие значения требуют дополнительной обработки.

Ответ 4

Здесь, что я придумал, функция integerToArray возвращает вектор, который преобразуется из целочисленного значения. вы также можете проверить его с помощью основной функции:

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

vector <int> integerToArray(int x)
{
    vector <int> resultArray;
    while (true)
    {
    resultArray.insert(resultArray.begin(), x%10);
    x /= 10;
    if(x == 0)
        return resultArray;
    }
}

int main()
{
    vector <int> temp = integerToArray(1234567);
    for (auto const &element : temp)
        cout << element << " " ;
    return 0;
}

//outputs 1 2 3 4 5 6 7 

Ответ 5

Возьмите log10 номера, чтобы получить количество цифр. Поместите это, скажем pos, затем, в цикле, возьмите по модулю 10 (n % 10), поместите результат в массив в позиции pos. Decrement pos и разделите число на 10. Повторяйте до pos == 0

Что вы хотели сделать со знаком, если он отрицательный?

Ответ 6

Самый простой способ, который я могу себе представить, это:

char array[40];
int number = 123456;

memset(array, 0x00, sizeof(array));

sprintf(array, "%d", number);

Кроме того, вы можете преобразовать каждую цифру в int, просто вычитая значение char на 0x30.

РЕДАКТИРОВАТЬ. Если это домашняя работа, ваш учитель, вероятно, попросит вас написать программу, используя оператор% (пример 12% 10 = 2). Если это так, хорошая домашняя работа; -)

Ответ 7

Вы можете использовать модуль для определения последней цифры.

И вы можете использовать деление, чтобы переместить другую цифру в последнее место.

Ответ 8

Вы не можете просто "преобразовать" его. Целое число не представлено в программном обеспечении в десятичной нотации. Таким образом, отдельные цифры, которые вы хотите, не существуют. Они должны быть рассчитаны.

Итак, учитывая произвольное число, как вы можете определить количество единиц?

Мы можем разделить на десять, а затем взять остаток: для 123, деление даст 12, а затем остальное 3. Таким образом, у нас есть 3. 12 говорят нам, что у нас прошлое, поэтому это может быть наш вклад для следующей итерации. Мы принимаем это, делим на 10 и получаем 1, а остаток от 2. Таким образом, у нас есть 2 в десятках мест, а 1 осталось работать сотнями. Разделите это на 10, что дает нам нуль и остаток 1. Таким образом, мы получаем 1 в сотнях мест, 2 в десятках и 3 в одном месте. И мы закончили, так как последнее деление возвратило нуль.

Ответ 10

если это действительно домашняя работа, тогда покажите это своему учителю - просто для удовольствия;-)

ВНИМАНИЕ! очень плохая производительность, неуклюжий способ достичь ожидаемого эффекта и вообще не делать это дома (работа); -)

#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>

typedef std::vector< int > ints_t;

struct digit2int
{
    int operator()( const char chr ) const
    {
        const int result = chr - '0';
        return result;
    }
};

void foo( const int number, ints_t* result )
{
    std::ostringstream os;
    os << number;
    const std::string& numberStr = os.str();
    std::transform(
        numberStr.begin(),
        numberStr.end(),
        std::back_inserter( *result ),
        digit2int() );
}

int main()
{
    ints_t array;
    foo( 123456, &array );
    std::copy(
        array.begin(),
        array.end(),
        std::ostream_iterator< int >( std::cout, "\n" ) );
}

Ответ 11

Если вы хотите превратить его в строку, это будет очень просто, просто сделайте то, что говорят все остальные, используя оператор%:

Скажем num = 123, мы можем это сделать:

string str;
while (num > 0)
{
   str = (num % 10) + str;  //put last digit and put it into the beginning of the string
   num = num /10;  //strip out the last digit
}

Теперь вы можете использовать str как массив символов. Выполнение этого с помощью массива - это проблема, потому что для ввода вещей в начале массива требуется переместить все остальное. Мы можем сделать это, вместо того чтобы помещать каждую цифру в строку, мы можем поместить ее в стек. Он поставит его в обратном порядке следующим образом: 3 2 1. Затем мы можем вытащить верхний номер один за другим и поместить его в массив в правильном порядке. Ваш массив будет выглядеть так: 1 2 3. Я оставлю реализацию вам, поскольку это домашняя работа.

@Broam имеет хорошее решение, но, как он заявил, он работает в обратном направлении. Я думаю, что ОП или тот, кто придет в этот поток, захочет его вперед и почему я публикую это. Если у вас есть лучшее решение, ответьте, я также заинтересован.