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