2009-05-18 3 views
0

У меня есть целые числа циклов for.Как удалить ведущие нули из целого числа, сгенерированного циклом, и сохранить его как массив?

Например:

for (int i=300; i>200; i--) 
    {(somefunction)*i=n; 
    cout<<n; 
    } 

Это производит вывод на экран, как это:

f=00000000000100023; 

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

Как это:

array[0]=1; 
array[1]=0; 
array[2]=0; 
array[3]=0; 
array[4]=2; 
array[5]=3; 

Как бы идти о достижении этой цели?

+0

Если ваш номер сохранен как целое число f, он не будет сохранен как f = 0000000 ... что угодно. Целые числа не хранят начальные нули. –

+0

duplicate: http://stackoverflow.com/questions/515612/convert-an-integer-number-into-an-array – lothar

+1

@ lothar - так как вопрос отличается тем, что он предлагает, я не вижу его как duplicate – TStamper

ответ

4

Это ответ на вопрос, потому что все они есть, я просто не думаю, что вы видите решение.

Прежде всего, если они целые числа Bill's answer вместе с другими ответами являются замечательными, сохраните некоторые из них, пропустив часть «store in array». Кроме того, как указано в комментарии к вашему вопросу, эта часть a duplicate.

Но с вашим новым кодом решение, которое я имел в виду, было John's solution. Вам просто нужно выяснить, как игнорировать ведущие нули, которые легко:

std::vector<int> digits; 
bool inNumber = false; 

for (int i=300; i>200; i--)  
{ 
    int value = (somefunction) * i; 

    if (value != 0) 
    { 
     inNumber = true; // its not zero, so we have entered the number 
    } 

    if (inNumber) 
    { 
     // this code cannot execute until we hit the first non-zero number 
     digits.push_back(value); 
    } 
} 

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

2

Прямой путь будет

std::vector<int> vec; 
while(MyInt > 0) 
{ 
    vec.push_back(MyInt%10); 
    MyInt /= 10; 
} 

, который хранит десятичный в обратном порядке (вектор используется для упрощения моего кода).

+0

push_front будет лучше, но я обычно использую push_back с векторами – stefaanv

3

В свете отредактированного вопроса мой первоначальный ответ (ниже) не самый лучший. Если вы абсолютно должны иметь вывод в массиве вместо вектора, вы можете начать с ответа GMan, а затем передать полученные байты в массив. Вы можете сделать то же самое с ответом JohnFx, как только найдете в нем результат, отличный от нуля.


Я предполагаю, что f имеет тип int, в этом случае он не хранит ведущие нули.

int f = 100023; 

Для начала вам нужно найти нужную длину массива. Вы можете сделать это, взяв журнал (база 10) f. Вы можете импортировать библиотеку cmath для использования функции log10.

int length = log10(f); 
int array[length]; 

length должны теперь быть 6.

Далее можно убрать каждую цифру из f и хранить его в массиве, используя петлю и оператор модуля (%).

for(int i=length-1; i >= 0; --i) 
{ 
    array[i] = f % 10; 
    f = f/10; 
} 

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

+0

. Это отличный ответ, но я сделал ошибку, указав, что это число было целым числом. Прости! спасибо за помощь. – user103572

+0

вопрос в настоящее время исправлен – user103572

2

Повесить на секунду. Если вы написали код, генерирующий целые числа, зачем беспокоиться о его синтаксическом анализе в массив?

Почему бы просто не зажать целые числа в массив в вашем цикле?

int array[100]; 

for (int i=300; i>200; i--)  
{ 
    array[i]= (somefunction)*i;  
} 
+0

необходимо избавиться от предшествующих нулей, поскольку требуемое число будет иметь значение, только если это правильный порядок, надеюсь, что это поможет – user103572

+0

Я все еще думаю, что это сработает. Ведущие нули в целых числах просто логичны. Если они появляются из вашего программирования, это просто проблема форматирования, а не проблема с хранилищем. Фактически, для выполнения начальных нулей требуется EXTRA-работа. Код, который вы предоставили в исходном вопросе, не приведет к выходу, который вы описали. – JohnFx

+1

Посмотрев на свой код еще немного, я думаю, вы можете сбивать с толку, что отображает cout и что на самом деле хранится. Возможно, у вас есть, например, setfill ('0') где-то в коде, который будет заполнять номер при распечатке через COUT. – JohnFx

Смежные вопросы