Преобразовать целое число в массив - PullRequest
13 голосов
/ 07 декабря 2009

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

int number = 123456 ;
int array[7] ;

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

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

Ответы [ 11 ]

24 голосов
/ 07 декабря 2009

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

123456 % 10 = 6

123456 / 10 = 12345

12345 % 10 = 5

12345 / 10 = 1234

9 голосов
/ 07 декабря 2009

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

int array[6];
int number = 123456;
for (int i = 5; i >= 0; i--) {
    array[i] = number % 10;
    number /= 10;
}
5 голосов
/ 09 августа 2017

Здесь я пришел к выводу, что функция 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 
4 голосов
/ 07 декабря 2009

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

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

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

2 голосов
/ 07 декабря 2009

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

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

0 голосов
/ 30 сентября 2015

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

Допустим, 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. Я оставлю вам реализацию, так как это домашнее задание.

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

0 голосов
/ 11 декабря 2009

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

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

#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" ) );
}
0 голосов
/ 07 декабря 2009

См. Вопрос SO Раскрытие языка: преобразовать строку цифр в массив целых чисел? для версии C / C ++ (как и для других языков).

0 голосов
/ 07 декабря 2009

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

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

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

0 голосов
/ 07 декабря 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...