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;
}
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;
}
#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;
}