Ненужное округление чисел при делении - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нужно вывести через пробел каждую цифру десятичного числа.
int main(void)
{
    long long int  x; //само число
    float l;
    long long int z; 
 
    while (scanf("%lld", &x) == 1) { 
        long long int k = 1;

         while (((long long int)(x / k)) >= 10) { // узнаем количество разрядов
            k *=10;}
        
        do {
            z = (long long int) x / k ;  // берем целую часть  разряда
            l = (float) z / 10;  // делаем ее вещественной 
            z = (long long int)( ( l - floor(l) ) * 10 ); // избавляемся от вещественности
            printf("%d ",z);
            k /= 10;
        } while(k != 1);
        
}
    return 0;
}
Вроде выводит, но почему-то не совсем то. Например, если ввести 123456789, то ответ будет 1 2 3 4 5 5 7 7. И если отдельно вывести printf("%f ", l) , то видно,что после пятерки идет округление, как на картинке. Почему это происходит?

Решение задачи: «Ненужное округление чисел при делении»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
void print(int n)
{
     if (n < 10) 
         printf("%d ",n);
     else
     {
         print(n/10);
         printf("%d ",n%10);
     }            
}
int main(int argc, char *argv[])
{
  int p=123456789;
  print(p);
  printf("\n");
  system("PAUSE");  
  return 0;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с файлами и для работы с памятью.
  2. Определение функции print, которая будет выводить число на экран.
  3. Проверка условия: если число меньше 10, то оно выводится на экран.
  4. В противном случае число делится на 10 и функция print вызывается рекурсивно для вывода десятых, а затем остатка от деления выводится на экран.
  5. Определение функции main, которая является точкой входа в программу.
  6. Создание переменной типа int с именем p и значением 123456789.
  7. Вызов функции print с передачей значения переменной p в качестве аргумента.
  8. Вывод символа новой строки на экран.
  9. Вызов функции system, которая приостанавливает выполнение программы до тех пор, пока пользователь не нажмет любую клавишу.
  10. Возврат 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5
Похожие ответы