Ошибка преобразования из дробного типа в целое - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д