【剣指Offer面接プログラミング問題】タイトル1513:バイナリ中1の個数――九度OJ
1206 ワード
タイトルの説明:
整数を入力し、その数のバイナリ表現の1つの数を出力します.ここで負数は補数で表される.
入力:
入力には、複数のテストサンプルが含まれる場合があります.各入力ファイルについて、最初の行には、テストサンプルの数を表す整数Tが入力されます.テストサンプルごとに整数として入力します.nはint範囲内の整数であることを保証する.
出力:
各テストケースに対応して、入力した数の1つを表す整数を出力します.
サンプル入力:
3 4 5 -1
サンプル出力:
1 2 32
【解題の考え方】バイナリ表現である以上、バイナリからしか入手できないが、バイナリはビット操作と密接に関連しているため、水に沿って舟を押すと、ビット操作を多く使いたいと思って実現しやすい.1の個数を集計する以上、1つだけのバイナリで表される数と目標数とを対応付けて、その数1の位置に対応する目標数バイナリ位置が1であるか否かを得ることができ、対応付けた結果が0であれば0、そうでなければ1となる.次に,数のうち1の位置を順に右にシフトし,目標数のバイナリと照合すればよい.
AC code:
タイトルリンク:http://ac.jobdu.com/problem.php?pid=1513
整数を入力し、その数のバイナリ表現の1つの数を出力します.ここで負数は補数で表される.
入力:
入力には、複数のテストサンプルが含まれる場合があります.各入力ファイルについて、最初の行には、テストサンプルの数を表す整数Tが入力されます.テストサンプルごとに整数として入力します.nはint範囲内の整数であることを保証する.
出力:
各テストケースに対応して、入力した数の1つを表す整数を出力します.
サンプル入力:
3 4 5 -1
サンプル出力:
1 2 32
【解題の考え方】バイナリ表現である以上、バイナリからしか入手できないが、バイナリはビット操作と密接に関連しているため、水に沿って舟を押すと、ビット操作を多く使いたいと思って実現しやすい.1の個数を集計する以上、1つだけのバイナリで表される数と目標数とを対応付けて、その数1の位置に対応する目標数バイナリ位置が1であるか否かを得ることができ、対応付けた結果が0であれば0、そうでなければ1となる.次に,数のうち1の位置を順に右にシフトし,目標数のバイナリと照合すればよい.
AC code:
#include
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i=0 && t>tt)
break;
if(tt&t)
++cnt;
t<<=1;
++idx;
}
printf("%d
",cnt);
}
}
return 0;
}
/**************************************************************
Problem: 1513
User: huo_yao
Language: C
Result: Accepted
Time:80 ms
Memory:912 kb
****************************************************************/
タイトルリンク:http://ac.jobdu.com/problem.php?pid=1513