каждая k-я цифра числа в c

#arrays #c #integer

Вопрос:

Учитывая некоторые натуральные числа n и k, моя цель-написать программу на языке Си, которая выводит число, образованное каждой k-й цифрой n. Я написал программу следующим образом:

 #include <stdio.h>
#include <math.h>
#define MAX 100
  
void printDigit(int n, int k)
{
    int arr[MAX];
    int i = 0;
    int j, r;
  
    while (n != 0) {
        r = n % pow(10,k);
        arr[i] = r;
        i  ;
        n = n / pow(10,k);
    }
  
    for (j = i - 1; j > -1; j--) {
        printf("%d ", arr[j]);
    }
}
  
int main()
{
    int n = 12345678;
    int k = 2;
  
    printDigit(n,k);
    return 0;
}
 

Компилятор говорит

 error: invalid operands to binary % (have 'int' and 'double')
   16 |         r = n % pow(10,k);
 

Я не могу понять, в чем проблема. Оба n и 10^k являются целыми числами, и % операция должна быть допустимой

Комментарии:

1. pow подпись double pow(double, double) такова, хотя pow(10, k) может быть представлена как int тип поворота функции double

2. n % pow(10,k) -> n % (int)pow(10,k) . Прочитайте о типизации в своем учебном материале по языку C.

3. @Jabberwocky, тебе следует округлить его, а не бросать. Иногда значение может быть немного меньше целого числа и (int) округляться в меньшую сторону.

4. И хотя вы можете заставить его работать pow() , неточности будут огромной помехой для работы, и это излишне неэффективно (если это имеет значение). Вы можете сделать это совершенно хорошо и, в конце концов, легче, с помощью последовательного умножения или деления на 10.

5. к-й, начиная с начала или с конца?