BUPT复试专题—二进制数(2012)

https://www.nowcoder.com/practice/103dd589fed14457a673c613d8de3841?tpId=67&tqId=29634&tPage=1&ru=/kaoyan/retest/1005&qru=/ta/bupt-kaoyan/question-ranking

题目描述

大家都知道,数据在计算机里中存储是以二进制的形式存储的。 有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的。 你能帮帮小明吗?并且,小明不想要二进制串中前面的没有意义的0串,即要去掉前导0。

输入描述:

第一行,一个数字T(T<=1000),表示下面要求的数字的个数。
接下来有T行,每行有一个数字n(0<=n<=10^8),表示要求的二进制串。

输出描述:

输出共T行。每行输出求得的二进制串。
示例1

输入

5
23
535
2624
56275
989835

输出

10111
1000010111
101001000000
1101101111010011
11110001101010001011


签到题,除二取余法即可,注意0
#include <bits/stdc++.h>
using namespace std;
#define within(x,a,b) ((unsigned)((x)-(a))<=((b)-(a)))
int readint(int *p)
{
    int ch;
    while(!within(ch=getchar(),'0','9'))
        if(ch == EOF) return EOF;
    int rslt = 0;
    do
        rslt=rslt*10+(ch-'0');
    while(within(ch=getchar(),'0','9'));
    *p = rslt;
    return 1;
}
int main()
{
    int T;
    while(~scanf("%d",&T))
    {
        while(T--)
        {
            int i,num=0;
            readint(&i);
            if(i==0)
            {
                cout<<"0"<<endl;
                continue;
            }
            char donser[100];
            while(i!=1)
            {
                donser[num++]=i%2+'0';
                i/=2;
            }
            cout<<"1";
            while(num--)
                cout<<donser[num];
            cout<<endl;
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/dzzy/p/8260638.html