Ошибка преобразования из дробного типа в целое - C (СИ)

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

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

Возможно, решение не самое эффективное, но увидела реализацию именно так. Вроде правильно, должно работать, но все упирается в преобразование c дробного типа в целое. Ошибка компилятора (преобразования типа) или что? Задача:

Напишите программу, которая заменяет данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке.

Листинг программы
  1. #include <stdio.h>
  2. /*
  3. Напишите программу, которая заменяет данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке.
  4. */
  5. int atoi( const char[] ); // преобразование текста в число
  6. int main () {
  7. const double DEC = 10;
  8. char numerals[12]; /* цифры числа */
  9. int num = 1234567890; /* исходное число */
  10. int cnum; /* искомое число */
  11. int floor, i;
  12. double rational = num,
  13. numeral; /* цифра числа */
  14. for ( floor = num, i = 0; floor >= 1; i++ ) {
  15. rational = floor / DEC;
  16. floor = rational;
  17. numeral = DEC * ( rational - floor );
  18. printf( "%d | %f | %f\n", i, rational, numeral ); /* проверка преобразований double - int */
  19. numerals[ i ] = '0' + numeral;
  20. }
  21. numerals[ i ] = '\0';
  22. cnum = atoi( numerals );
  23. printf( "%s\n", numerals );
  24. printf( "%d | %d\n", num, cnum );
  25. return 0;
  26. }
  27. int atoi ( const char numerals[] ) {
  28. int n = 0;
  29. for ( int i = 0; numerals[ i ] != '\0'; i++ ) {
  30. if ( numerals[ i ] >= '0' && numerals[ i ] <= '9' )
  31. n = 10 * n + ( numerals[ i ] - '0' );
  32. }
  33. return n;
  34. }
На выводе:
Листинг программы
  1. 0 | 123456789.000000 | 0.000000
  2. 1 | 12345678.900000 | 9.000000
  3. 2 | 1234567.800000 | 8.000000
  4. 3 | 123456.700000 | 7.000000
  5. 4 | 12345.600000 | 6.000000
  6. 5 | 1234.500000 | 5.000000
  7. 6 | 123.400000 | 4.000000
  8. 7 | 12.300000 | 3.000000
  9. 8 | 1.200000 | 2.000000
  10. 9 | 0.100000 | 1.000000
  11. 0986654321
  12. 1234567890 | 986654321

Решение задачи: «Ошибка преобразования из дробного типа в целое»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4.  
  5. /*
  6. Напишите программу, которая заменяет данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке.
  7. */
  8. int atoi( const char[] ); // преобразование текста в число
  9.  
  10. int main () {
  11.     const double DEC = 10;
  12.     char numerals[12]; /* цифры числа */
  13.     int num = 1234567890; /* исходное число */
  14.     int cnum; /* искомое число */
  15.     int floor, i;
  16.     double rational = num,
  17.     numeral; /* цифра числа */
  18.     for ( floor = num, i = 0; floor >= 1; i++ ) {
  19.         rational = floor / DEC;
  20.         floor = rational;
  21.         numeral = DEC * ( rational - floor );
  22.         numerals[ i ] = '0' + ( int )( numeral + 0.5 );
  23.     }
  24.     numerals[ i ] = '\0';
  25.     cnum = atoi( numerals );
  26.     printf( "%s\n", numerals );
  27.     printf( "%d | %d\n", num, cnum );
  28.     return 0;
  29. }
  30.  
  31. int atoi ( const char numerals[] ) {
  32.     int n = 0;
  33.     for ( int i = 0; numerals[ i ] != '\0'; i++ ) {
  34.         if ( numerals[ i ] >= '0' && numerals[ i ] <= '9' )
  35.             n = 10 * n + ( numerals[ i ] - '0' );
  36.     }
  37.     return n;
  38. }

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


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

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

11   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы