Как я могу разделить целое число на несколько цифр? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть функция остатка, которая находит, что по модулю числа, то функция делителя для деления этого числа.Моя программа работает не так, как мне нужно.Например, если я введу 2502 в качестве своего числа, я получу вывод: 2 5 0 2. Мне нужно иметь возможность сохранять значение на каждой итерации, например:

number: 123
    123 % 10 = 3  //last digit
Number: 123 / 10 = 12
    12  % 10 = 2  //second digit
Number: 12  / 10 = 1
    1   % 10 = 1  //first digit

int Rem(int num);
int Div(int num);

int main() {
    int num;
    printf("Enter an integer between 1 and 32767: ");
    scanf("%d", &num);
    Rem(num);
    Div(num);
    printf("%d","The digits in the number are: ");

}


    int Rem(int num) {
        while(num != 0){
        int rem = num % 10;
        return rem;
        }
    }

    int Div(int num){
        while(num != 0){
        int div = num / 10;
        return div;
        }
    }

Ответы [ 3 ]

1 голос
/ 14 июня 2019

Идея здесь довольно проста, но есть некоторые тонкости. Вот немного псевдокода. Вам нужно будет конвертировать в C.

num = 9934; // or get it from input
do {
    rem = num % 10;  // this gives you the lowest digit
    num = num / 10;  // divide by 10 to get rid of that lowest digit
    print rem; 
} while (num != 0);

Я использую петлю do ... while, поэтому вывод будет правильным, если пользователь введет 0.

Если вы закодируете это и запустите его, вы заметите, что оно печатает цифры в обратном порядке: 4 3 9 9. Так что вам понадобится какой-то способ перевернуть цифры, прежде чем вывести их. Три возможных способа:

  1. Сохранение цифр в массиве, а затем обратный массив перед выводом.
  2. Вставьте каждую цифру в стек. Когда вы закончите, вытолкните каждую цифру из стека и выведите ее.
  3. Написать рекурсивную функцию. Это исключило бы необходимость явного стека или массива.
0 голосов
/ 14 июня 2019

Вы можете просто использовать эту функцию, она возвращает количество цифр, передаваемых аргументом

size_t  ft_cnbr(int n)
    {
        size_t count;

        count = 1;
        if (n < 0)
        {
            count++;
            n = -n;
        }
        while (n > 9)
        {
            n = n / 10;
            count++;
        }
        return (count);
    }
0 голосов
/ 14 июня 2019

Также вы можете преобразовать ее в строку, а затем преобразовать обратно элементы этой строки, но помните '\ 0'

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