Возьмите цифры и сохраните их в векторе в C - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь прочитать число n с 00000000000 <= <em>n <= 99999999999 и поместить его цифры в вектор для работы с ними. </p>

#include<stdio.h>
int main(){
  long long int num = 0, power = 1, cpf[12], qtd=0;
  scanf("%lld",&num);
while(num != 0)
    {
        long long int digit = num /power;                                   

        printf("%lld\n", digit);
        cpf[qtde] = digit;
        qtde++;
        if(digit!=0)
          num=num-digit*power;
        if(power!=1)
          power/=10;

    }

 return 0;

}

Не хранит начальные или конечные нули. Любые советы, как это исправить?

1 Ответ

0 голосов
/ 14 января 2020

Вы утверждаете, что начальные и конечные нули не сохраняются, но это не совсем так.

Как упоминалось в комментариях, целочисленное значение не имеет начальных нулей. Это только часть печатного (или напечатанного) представления этого значения. Целое число 00123 совпадает со значением 123 (игнорируя восьмеричное представление).

Это означает, что остаются только конечные нули. Но ваш код делает что-то совершенно другое, что указано в вашем описании. Он не хранит никаких цифр в вашем массиве. Давайте пройдемся по вашему коду:

  long long int num = 0, power = 1, cpf[12], qtd=0;
  scanf("%lld",&num);

// Let's assume you entered 1234.

  while(num != 0)
  {
        long long int digit = num /power;                                   
// During first iteration we have power==1 => digits=num ==1234

        printf("%lld\n", digit);
        cpf[qtde] = digit;
// You store your whole number (1234) in the first element of the array.

        qtde++;  // advance to second element

        if(digit!=0)
          num=num-digit*power;
// With digit==num and power==1 you get num=num-num*1 which equals 0 !!

        if(power!=1)
          power/=10;
// during first iteration power==1 and will never change.
// Also: dividing by 10 would not be useful anyway.

// Now num==0 and we will not take another round in the loop...
    }

Если вы не запускаете какой-то другой код, вы не только потеряете конечные нули, но и получите только 1 элемент в вашем массиве, который совпадает с вашим начальным числом.

Как решить проблему:

Лидирующие нули могут быть сохранены, только если вы обрабатываете свой ввод как строку. Тогда вы можете обрабатывать каждый di git отдельно и только нужно преобразовать символ в его числовое значение. ('1' => 1) Это также решило бы неправильное разделение цифр в вашем коде.

Если вам не нужны начальные нули, вам следует сначала увеличить power, если он не больше, чем начальный номер. Затем вы будете перебирать свой l oop для каждого десятичного числа di git. И вам нужно хранить только самые значимые di git в каждом элементе вашего массива.

...