#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. к-й, начиная с начала или с конца?