Я хотел бы преобразовать целое число в массив, чтобы оно выглядело следующим образом:
int number = 123456 ;
int array[7] ;
с результатом:
array[0] = 1
array[1] = 2
...
array[6] = 6
Я хотел бы преобразовать целое число в массив, чтобы оно выглядело следующим образом:
int number = 123456 ;
int array[7] ;
с результатом:
array[0] = 1
array[1] = 2
...
array[6] = 6
Возможно, лучшим решением будет обратная работа:
123456 % 10 = 6
123456 / 10 = 12345
12345 % 10 = 5
12345 / 10 = 1234
просто используйте модульную арифметику:
int array[6];
int number = 123456;
for (int i = 5; i >= 0; i--) {
array[i] = number % 10;
number /= 10;
}
Вы можете извлечь последнюю цифру номера следующим образом:
int digit = number % 10;
number /= 10;
Обратите внимание, что вы также должны проверить, является ли number
положительным. Другие значения требуют дополнительной обработки.
Здесь, что я придумал, функция 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
Возьмите log10 номера, чтобы получить количество цифр. Поместите это, скажем pos
, затем, в цикле, возьмите по модулю 10 (n % 10
), поместите результат в массив в позиции pos
. Decrement pos
и разделите число на 10. Повторяйте до pos == 0
Что вы хотели сделать со знаком, если он отрицательный?
Самый простой способ, который я могу себе представить, это:
char array[40];
int number = 123456;
memset(array, 0x00, sizeof(array));
sprintf(array, "%d", number);
Кроме того, вы можете преобразовать каждую цифру в int, просто вычитая значение char на 0x30.
РЕДАКТИРОВАТЬ. Если это домашняя работа, ваш учитель, вероятно, попросит вас написать программу, используя оператор% (пример 12% 10 = 2). Если это так, хорошая домашняя работа; -)
Вы можете использовать модуль для определения последней цифры.
И вы можете использовать деление, чтобы переместить другую цифру в последнее место.
Вы не можете просто "преобразовать" его. Целое число не представлено в программном обеспечении в десятичной нотации. Таким образом, отдельные цифры, которые вы хотите, не существуют. Они должны быть рассчитаны.
Итак, учитывая произвольное число, как вы можете определить количество единиц?
Мы можем разделить на десять, а затем взять остаток: для 123, деление даст 12, а затем остальное 3. Таким образом, у нас есть 3. 12 говорят нам, что у нас прошлое, поэтому это может быть наш вклад для следующей итерации. Мы принимаем это, делим на 10 и получаем 1, а остаток от 2. Таким образом, у нас есть 2 в десятках мест, а 1 осталось работать сотнями. Разделите это на 10, что дает нам нуль и остаток 1. Таким образом, мы получаем 1 в сотнях мест, 2 в десятках и 3 в одном месте. И мы закончили, так как последнее деление возвратило нуль.
См. вопрос SO Отображение языков: преобразовать строку цифр в массив целых чисел? для версии C/С++ (а также других языков).
если это действительно домашняя работа, тогда покажите это своему учителю - просто для удовольствия;-)
ВНИМАНИЕ! очень плохая производительность, неуклюжий способ достичь ожидаемого эффекта и вообще не делать это дома (работа); -)
#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" ) );
}
Если вы хотите превратить его в строку, это будет очень просто, просто сделайте то, что говорят все остальные, используя оператор%:
Скажем 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 имеет хорошее решение, но, как он заявил, он работает в обратном направлении. Я думаю, что ОП или тот, кто придет в этот поток, захочет его вперед и почему я публикую это. Если у вас есть лучшее решение, ответьте, я также заинтересован.