2015-03-06 8 views
0

Мне было интересно, как можно получить цифровые элементы целого числа, чтобы я мог отображать такой массив, как [1][7], например, из числа 17. Я нашел этот solution here для подсчета цифр и теперь мне нужно, чтобы соответствовать цифр, составляющих целое число в массив и поэтому хочет, чтобы получить значение каждого из нихизвлечение цифровых элементов целого числа

int A = 17; 
int table[lenght_of_A]; 
A 'operation_to_fit_A_in' table; 
+1

Подсказка: как вы можете получить последнюю цифру? –

+0

Почему это связано с C++? – haavee

ответ

0

Идея заключается в том, что вы запускаете цикл (псевдокод):

while(value != 0) { 
    nextDigitValue = value % 10; // this is "modulo 10" 
    nextDigitChar = '0' + nextDigitValue; 
    value = value/10; // this lets you proceed to next digit 
} 
1

В C++ я бы сделал это так. Тогда нет необходимости подсчитывать цифры заранее:

#include <list> 

std::list<int> digits; 
// Slightly adapted algorithm from sharptooth: this one yields a zero if 
// the value was 0. (sharptooth's wouldn't yield the digit 0 if a zero was 
// being analyzed.) 
do { 
    digits.push_front(value%10); 
    value /= 10; 
} while(value!=0); 

digits теперь содержит список отдельных цифр и могут быть отображены в любой форме вы любите.

+0

Я бы предпочел вектор, поскольку он имеет тенденцию быть быстрее. –

+0

'vector' поддерживает только' .push_back() ', что приведет к перераспределению при увеличении вектора. Вставка спереди вектора (очень) дорого; все последующие члены должны быть смещены «вверх». При использовании '.push_back()' либо либо вы должны помнить об обратном векторе, либо, альтернативно, итерации с. .Rbegin() 'на' .rend() '. Поэтому я не уверен, что «вектор» всегда будет гарантированно быстрее. Возможно, если элементы предварительно выделены (но тогда вам нужно проанализировать количество, зная, сколько цифр оно содержит, что также будет стоить немного времени). – haavee

+0

Я не заметил, что ты продвигался вперед! Тем не менее, нажатие нескольких ints более дешево, чем дополнительные распределения, используемые списком. Вы также можете отбросить назад, а затем перевернуть вектор. –

0

благодарит за помощь. Наконец, InI заставил его работать.

void Getint(int A; int* array) 
{ 
    if (A < 10) 
     array[0] = A; 
     array[1] = 0; 
    if (A >= 10 && A < 100) 
     array[0] = A/10; 
     array[1] = A % 10; 
} 
Смежные вопросы