Problem H: 林教主的面试整数部分转换2进制,从右往左,除二取余;小数部分从左往右,乘二取整

Problem H: 林教主的面试

Time Limit: 1 Sec   Memory Limit: 64 MB
Submit: 16   Solved: 7
[ Submit][ Status][ BBS]

Description

    林教一表人才才高八斗英明神武英俊潇洒玉树临风风流倜傥盖世无双人见人爱花见花开十全十美完美无缺空前绝后名垂青史万古流芳林教凭借他一日万行的编码速度,和5分钟内秒杀一切能做题目的惊人思维,还有对计算几何优化网络流等神级算法的深刻理解,获得所有集训队的一致认可在亚洲区域赛上更是摘金夺银独占鳌头.

  已经进入大四的林教由于难遇敌手以致于心灰意冷无心恋战毅然选择了直接进入人生的下一阶段----工作.

  林教首先来到了某国内知名公司(简称A公司). 由于A公司的所有员工都害怕林教进入A公司之后会掩盖了他们所有人的光芒但又不能明目张胆地去拒绝一个大大的人才于是都绞尽脑汁帮助面试官出各种世界性难题阻止林教拿到offer. As we all know, 林教的算法几乎是无敌的这些难题均被林教一一破解无奈之下面试官得知尽管林教懂二进制,也懂小数但对二进制小数的理解颇为困惑(都怪当年逃课逃得太厉害了- -! ), 于是面试官眼前一亮临时出了一道具有一定误导性的题目请写出7.7(10)的二进制表示小数点后保留3结果不需要四舍五入林教心想: 7(10)=111(2)这是无可辩驳的事实7.7(10)就等于111.111(2). 于是他在面试官刚说完题目0.00000001秒便在纸上写上这个答案毫无悬念地林教就这样被无情地刷掉了!!! 林教在面试完回到寝室便发表状态在屌丝们的眼里, 7.7(10)也就只能等于111.111(2)… 假如你是林教主你会给出什么样的答案呢?

Input

输入文件的第一行是一个正整数T, 代表测试数据的数量.

接下来T每行为一个测试数据有两个数字第一个数字为一个十进制小数d, 为面试官出的题目里的数字, 0<=d<=10000, 且小数点后的数位都是4第二个数字是一个非负整数k(1<=k<=100), 代表要给出的答案小数点后需要输出k.

Output

对于输入文件里的每个测试数据输出相应的答案答案的格式为n(10)=m(2), 具体可参照样例输出.

Sample Input

37.7000 30.5000 53.1416 2

Sample Output

7.7000(10)=111.101(2)0.5000(10)=0.10000(2)3.1416(10)=11.00(2)

思路:整数部分转换2进制,从右往左,除二取余;小数部分从左往右,乘二取整

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
void N(int a)
{
    if(a>1)
    {
        N(a/2);
    }
    printf("%d",a&1);
}
int main()
{
    int a,b,c;
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d.%d%d",&a,&b,&c);
        printf("%d.%04d(10)=",a,b);
        N(a);
        printf(".");
        while(c--)
        {
            b*=2;
            printf("%d",b/10000);
            b%=10000;
        }
        printf("(2)\n");
    }
    return 0;
}

你可能感兴趣的:(Problem H: 林教主的面试整数部分转换2进制,从右往左,除二取余;小数部分从左往右,乘二取整)