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

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

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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#include <math.h>
 
 
/*
Напишите программу, которая заменяет данное натуральное число на число, которое получается из исходного записью его цифр в обратном порядке.
*/
int atoi( const char[] ); // преобразование текста в число
 
int main () {
    const double DEC = 10;
    char numerals[12]; /* цифры числа */
    int num = 1234567890; /* исходное число */
    int cnum; /* искомое число */
    int floor, i;
    double rational = num,
    numeral; /* цифра числа */
    for ( floor = num, i = 0; floor >= 1; i++ ) {
        rational = floor / DEC;
        floor = rational;
        numeral = DEC * ( rational - floor );
        numerals[ i ] = '0' + ( int )( numeral + 0.5 );
    }
    numerals[ i ] = '\0';
    cnum = atoi( numerals );
    printf( "%s\n", numerals );
    printf( "%d | %d\n", num, cnum );
    return 0;
}
 
int atoi ( const char numerals[] ) {
    int n = 0;
    for ( int i = 0; numerals[ i ] != '\0'; i++ ) {
        if ( numerals[ i ] >= '0' && numerals[ i ] <= '9' )
            n = 10 * n + ( numerals[ i ] - '0' );
    }
    return n;
}

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

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