Problem Links:
poj2105,
Problem:
IP Address
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 14026 | Accepted: 8022 |
Description
Suppose
you are reading byte streams from any device, representing IP
addresses. Your task is to convert a 32 characters long sequence of '1s'
and '0s' (bits) to a dotted decimal format. A dotted decimal format for
an IP address is form by grouping 8 bits at a time and converting the
binary representation to decimal representation. Any 8 bits is a valid
part of an IP address. To convert binary numbers to decimal numbers
remember that both are positional numerical systems, where the first 8
positions of the binary systems are:
27 26 25 24 23 22 21 20 128 64 32 16 8 4 2 1
Input
The
input will have a number N (1<=N<=9) in its first line
representing the number of streams to convert. N lines will follow.
Output
The
output must have N lines with a doted decimal IP address. A dotted
decimal IP address is formed by grouping 8 bit at the time and
converting the binary representation to decimal representation.
Sample Input
4 00000000000000000000000000000000 00000011100000001111111111111111 11001011100001001110010110000000 01010000000100000000000000000001
Sample Output
0.0.0.0 3.128.255.255 203.132.229.128 80.16.0.1
Source
México and Central America 2004
Solution:
Just straight forward translate the binary to decimal numbers.
Source Code:
//Wed Apr 14 13:26:22 CDT 2010#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(int argc, const char* argv[])
{
freopen("input.in", "r", stdin);
freopen("output.out", "w", stdout);
int N;
while (cin >> N)
{
for (int i = 0; i < N; i++)
{
string str;
cin >> str;
int a = 0;
int b = 0;
int c = 0;
int d = 0;
for (int idx = 0; idx < 8; idx++)
{
a = a * 2 + str[idx] - '0';
}
for (int idx = 8; idx < 16; idx++)
{
b = b * 2 + str[idx] - '0';
}
for (int idx = 16; idx < 24; idx++)
{
c = c * 2 + str[idx] - '0';
}
for (int idx = 24; idx < 32; idx++)
{
d = d * 2 + str[idx] - '0';
}
cout << a << "." << b << "." << c << "." << d << endl;
}
}
fclose(stdin);
fclose(stdout);
return 0;
}
No comments :
Post a Comment