模拟浮点数的计算,按题意搞就是了,注意非符号位全为0的情况,这种情况是不用算的,默认为0。感觉这组题最恶心的地方就是它的格式化输出了,这题printf满足不了需求,还要再字符串处理下,真蛋疼。。
#include<stdio.h>
#include<math.h>
int main()
{
puts("Program 6 by team X");
char s[17], t[20];
while (gets(s) != NULL)
{
int i, exp = -63, power = 1;
for (i = 7; i > 0; i--)
{
if (s[i] == '1')
exp += power;
power *= 2;
}
double base = 1, p = 0.5;
for (i = 8; i < 16; i++)
{
if (s[i] == '1')
base += p;
p /= 2;
}
double res = base * pow(2, exp);
if (s[0] == '1')
res = -res;
int zero = 1;
for (i = 1; i < 16; i++)
if (s[i] == '1')
{
zero = 0;
break;
}
if (zero)
res = 0;
sprintf(t, "%le", res);
if (res >= 0)
putchar(' ');
i = 0;
while (t[i] != 'e')
putchar(t[i++]);
putchar(t[i++]);
putchar(t[i++]);
putchar('0');
while (t[i] != '\0')
putchar(t[i++]);
putchar('\n');
}
puts("End of program 6 by team X");
return 0;
}