Ошибка преобразования из дробного типа в целое - 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;
}