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

Я должен вывести цифры числа в виде целого числа, которое цифры этого числа могут точно разделить другое число с помощью функции unsigned deldigits(unsigned num, unsigned short div) Например, если num=1234; div=2, то цифры 1%2=1 (then i need the digit 1), 2%2=0(take out), 3%2=1 (then i need the digit 3), 4%2=0 (take out), поэтому выходные данные должны быть 13 как целое число.

Цикл, глобус / статическая переменная, массив или указатель НЕ допускаются (функции библиотеки также не разрешены, но я используюэто проверить в первую очередь). Я попытался использовать другую функцию, чтобы помочь и справиться со всеми функциями только с помощью рекурсии. Вычисление в середине было правильным, но каким-то образом выходное целое число не так, и я не могу его получить.

unsigned deldigits(unsigned num, unsigned short div)
{   
    if(num == 0) return 0;  

    int digit = num / (digitPower(num)/10);
    int modulo = digit % div;
    printf("ziffer: %d div: %d modulo: %d\n", digit, div, modulo);

    if(digitPower(num) == 0)
            return 0;
    return (digit*10 + deldigits(num - digit*(digitPower(num)/10), div));
}

int digitPower(int n)
{
    if(n == 0) return 1;
    return 10*digitPower(n/10);
}

int main()
{
    unsigned n = 1234;
    unsigned short d = 2;
    int z = deldigits(n, d);
    printf("deldigits:  %d\n", z); 
    return 0;
}

Основная функция - просто проверить функции и вывод. В этом случае вывод должен быть 13, но теперь я получил неправильный вывод 120. Может ли кто-нибудь помочь мне с этим? Спасибо!

1 Ответ

1 голос
/ 30 октября 2019

Вы слишком усложняете проблему. Вы можете использовать

num % 10

, чтобы получить последнюю цифру числа, а затем проверить, делится ли оно на div. Если это так, вы добавляете его в свой ответ и увеличиваете базу с коэффициентом 10, а затем удаляете только что проверенную цифру, деля число на 10. Затем просто повторяйте, пока не останется больше цифр. Пример кода:

   int recursion(int num,int div,int base) {
      int out = 0;
      if(num) {
        int digit = (num % 10);
        printf("digit %i\n",digit);
        if((digit % div) != 0) {
          out += digit * base;
          base *= 10;
        }
        out += recursion(num/10,div,base);
      }
      return out;
    }
...