fmod
не является правильным инструментом для обработки больших целых чисел, а также не является типом double
, если вы хотите sh, чтобы иметь точные цифры. Тип unsigned long int
может действительно быть недостаточно большим для чисел, таких как 10 16 , в зависимости от целевой архитектуры, особенно в устаревших системах, где тип long
имеет только 32 бита даже в 64-битном режиме.
Вы должны использовать тип unsigned long long int
, который гарантированно имеет не менее 64 битов значения, что более чем достаточно для больших целых чисел:
#include <stdio.h>
#include <stdlib.h>
int main() {
unsigned long long num;
int i, digit;
printf("Enter the 16-digit number: ");
if (scanf("%llu", &num) == 1) {
for (i = 1; num > 0; i++) {
printf("%d - ", i);
digit = num % 10;
printf("%d ", digit);
num /= 10;
printf("%llu\n", num);
}
}
return 0;
}