Thursday, October 28, 2010

poj_2105_IP_Address.cpp

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 :