http://acm.hdu.edu.cn/showproblem.php?pid=2207
该题目本身比较简单,但无意中发现我们的肥庄的一个比较有创新的方法,拿出来晒晒
#include <iostream>
using namespace std;
typedef union
{
unsigned 
long IP;
unsigned 
char Sub[4];
}
Info;


int main()
{
    
long N;
    Info key;
    
while (scanf("%ld",&N)!=EOF)
    
{
        key.IP
=0xFFFFFFFF;
        
long i=1;
        N
+=3;
        
while (i<N)
        
{
            i
=i<<1;
        }

        key.IP
=key.IP-(i-1);
        printf(
"%u.%u.%u.%u\n",key.Sub[3],key.Sub[2],key.Sub[1],key.Sub[0]);
    }

    
return 0;
}


以下是我的非常土的办法,

 

#include <iostream>
#include 
<math.h>
using namespace std;
int main()
{
    
int n,sum,len,i,a,h;
    
while (scanf("%d",&n)!=EOF)
    
{
        n
+=2;
        sum
=0;
        len
=32;
        h
=0;
        
while (n>0)
        
{
            sum
++;
            n
/=2;
        }

        
while (len-sum>=8)
        
{
            printf(
"255.");
            len
-=8;
            h
++;
        }

        a
=0;
        
while (sum>8)
        
{
            sum
-=8;
        }

        
for (i=7;i>=sum;i--)
        
{
            a
+=(int)pow(2,i);
        }

        h
++;
        printf(
"%d",a);
        
while(h<4)
        
{
            printf(
".0");
            h
++;
        }

        printf(
"\n");
    }

    
return 0;
}
posted on 2008-07-14 14:27  俺是打铁的  阅读(285)  评论(0编辑  收藏  举报