C++実習18 IPアドレス
2419 ワード
タイトル:【問題説明】
1つのIPアドレスは32ビットのバイナリの数で構成され、例えば:
111111111111111111111111000000002
記憶を容易にするために、8つのバイナリビットを1つの10進数で表し、1つのIPアドレスは4つの10進数で表し、上記のIPアドレスは以下のように表す.
255.255.255.0
今あなたに1つの上述の形式のIPアドレスをあげて、IPアドレスの32のバイナリビットの中で答えてください、何ビットが1です.
IPアドレスが255.255.255.255.0の場合、24ビットは1である.
【入力形式】
複数のテストデータがあります.
テストデータの最初の行は、テストデータ群数を表す正の整数Tである.
各テストデータはIPアドレスであり、形式は以下の通りである.
IP1.IP2.IP3.IP4
このうち0≦IP 1,IP 2,IP 3,IP 4≦255は10進数で表される.各IPアドレスは、実用的なIPアドレスであることは保証されません.
40%のテストデータ群数T 10≦T≦102;
30%のテストデータ群数T 102≦T≦103;
20%のテストデータ群数T 103≦T≦104;
10%のテストデータ群数T 104≦T≦105;
【出力形式】
各IPアドレスについて、出力1行は、32個のバイナリビットのうち、1のビット数の非負の整数を含む.
【サンプル入力】
5 255.255.255.255.0.255.0127.0.0.1 0.0.0.1 1.2.3.4 0.0.0.0【サンプル出力】
24 8 1 5ヒント:サンプル中の32ビットのIPアドレスは:
111111111111111111111111000000002
011111110000000000000000000000012
000000000000000000000000000000012
000000010000001000000011000001002
000000000000000000000000000000002
1つのIPアドレスは32ビットのバイナリの数で構成され、例えば:
111111111111111111111111000000002
記憶を容易にするために、8つのバイナリビットを1つの10進数で表し、1つのIPアドレスは4つの10進数で表し、上記のIPアドレスは以下のように表す.
255.255.255.0
今あなたに1つの上述の形式のIPアドレスをあげて、IPアドレスの32のバイナリビットの中で答えてください、何ビットが1です.
IPアドレスが255.255.255.255.0の場合、24ビットは1である.
【入力形式】
複数のテストデータがあります.
テストデータの最初の行は、テストデータ群数を表す正の整数Tである.
各テストデータはIPアドレスであり、形式は以下の通りである.
IP1.IP2.IP3.IP4
このうち0≦IP 1,IP 2,IP 3,IP 4≦255は10進数で表される.各IPアドレスは、実用的なIPアドレスであることは保証されません.
40%のテストデータ群数T 10≦T≦102;
30%のテストデータ群数T 102≦T≦103;
20%のテストデータ群数T 103≦T≦104;
10%のテストデータ群数T 104≦T≦105;
【出力形式】
各IPアドレスについて、出力1行は、32個のバイナリビットのうち、1のビット数の非負の整数を含む.
【サンプル入力】
5 255.255.255.255.0.255.0127.0.0.1 0.0.0.1 1.2.3.4 0.0.0.0【サンプル出力】
24 8 1 5ヒント:サンプル中の32ビットのIPアドレスは:
111111111111111111111111000000002
011111110000000000000000000000012
000000000000000000000000000000012
000000010000001000000011000001002
000000000000000000000000000000002
#include
using namespace std;
int getNum(int num){
int sum = 0;
while(num){
sum += (num & 1);
num >>= 1;
}
return sum;
}
int main(){
int n;
cin >> n;
string a;
int sum = 0;
while(n--){
int sum = 0;
cin >> a;
int num = 0;
int n = a.size();
for(int i = 0; i < n; i++){
if(a[i] == '.'){
sum += getNum(num);
num = 0;
} else{
num = num * 10 + (a[i] - '0');
}
}
sum += getNum(num);
cout << sum << endl;
}
return 0;
}
#include
using namespace std;
int getNum(int num){
int sum = 0;
while(num){
sum += (num & 1);
num >>= 1;
}
return sum;
}
int main(){
int n;
cin >> n;
/*
string a;
int sum = 0;
while(n--){
int sum = 0;
cin >> a;
int num = 0;
int n = a.size();
for(int i = 0; i < n; i++){
if(a[i] == '.'){
sum += getNum(num);
num = 0;
} else{
num = num * 10 + (a[i] - '0');
}
}
sum += getNum(num);
cout << sum << endl;
}
*/
int sum = 0;
int a[5];
char point;
while(n--){
int sum = 0;
scanf("%d%c%d%c%d%c%d",&a[1],&point,&a[2],&point,&a[3],&point,&a[4]);
for(int i = 1; i < 5; i++){
sum += getNum(a[i]);
}
cout << sum << endl;
}
return 0;
}