Как я могу удалить начальные нули из целого числа, сгенерированного циклом, и сохранить его как массив? - PullRequest
0 голосов
/ 18 мая 2009

У меня есть цикл 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;

Как мне добиться этого?

Ответы [ 5 ]

4 голосов
/ 19 мая 2009

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

Во-первых, если они являются целыми числами Ответ Билла вместе с другими ответами великолепны, за исключением некоторых из них, пропустите часть "store in array" Также, как указано в комментарии к вашему вопросу, эта часть является дубликатом .

Но с вашим новым кодом я имел в виду решение Решение Джона . Вам просто нужно выяснить, как игнорировать начальные нули, что легко:

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);
    }
}

По сути, просто не начинайте нажимать, пока не достигнете действительного числа.

3 голосов
/ 18 мая 2009

В свете отредактированного вопроса мой оригинальный ответ (ниже) не самый лучший. Если вам абсолютно необходимо иметь выходные данные в массиве вместо вектора, вы можете начать с ответа 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, чтобы подготовиться к следующей итерации цикла.

2 голосов
/ 19 мая 2009

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

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

int array[100];

for (int i=300; i>200; i--)    
{
    array[i]= (somefunction)*i;    
}
2 голосов
/ 18 мая 2009

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

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

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

1 голос
/ 18 мая 2009

Поскольку ведущие нули не сохраняются , поскольку они представляют собой одно и то же число

См .: преобразование целого числа в массив

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