59 lines
1.2 KiB
C
59 lines
1.2 KiB
C
|
//~ 2. Прочесть из потока ввода число типа float и затем вывести его на экран в формате a*2\^b,
|
|||
|
//~ где a и b — десятичные числа, причём а в диапазоне от [0,1; 1).
|
|||
|
//~ Возможное решение: float.c. думал спервадать задачу на полноценный вывод, но сложновато получится на мой взгляд.
|
|||
|
//~ Пример решения: float.c
|
|||
|
|
|||
|
#include <stdio.h>
|
|||
|
#include <stdint.h>
|
|||
|
|
|||
|
int main ()
|
|||
|
{
|
|||
|
float a=0;
|
|||
|
uint32_t* pa = (uint32_t*)&a;
|
|||
|
int o=0;
|
|||
|
scanf("%f", &a);
|
|||
|
|
|||
|
if(a<0)
|
|||
|
{
|
|||
|
putchar('-');
|
|||
|
}
|
|||
|
|
|||
|
float m_f = (*pa & 0x7FFFFF ) / (float)0x800000 ;
|
|||
|
o = (((*pa) >> 23) & 0xFF) - 127 ;
|
|||
|
|
|||
|
putchar ('1');
|
|||
|
putchar (',');
|
|||
|
|
|||
|
for (int i = 0; i < 9; i++)
|
|||
|
{
|
|||
|
m_f*=10;
|
|||
|
putchar ('0'+ m_f);
|
|||
|
m_f = m_f - (int)m_f;
|
|||
|
}
|
|||
|
|
|||
|
putchar ('*');
|
|||
|
putchar ('2');
|
|||
|
putchar ('^');
|
|||
|
|
|||
|
if(o<0)
|
|||
|
{
|
|||
|
putchar ('-');
|
|||
|
o=-o;
|
|||
|
}
|
|||
|
|
|||
|
if ( o >= 100)
|
|||
|
{
|
|||
|
putchar ('1');
|
|||
|
o%=100;
|
|||
|
}
|
|||
|
|
|||
|
if(o>=10)
|
|||
|
{
|
|||
|
putchar('0' + o/10);
|
|||
|
o%=10;
|
|||
|
}
|
|||
|
putchar('0' + o);
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|