这题是个水题,太久没写代码都不太能写出来了,我觉得这题本来是可以过的
学习到了%x等的用法,真的很方便,哈哈
题意真的真的很简单,话不多说,哈
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
char str[200];
int a[10];
int maxn,k;
void init()
{
for(int i=1;i<=8;i++)
{
for(int j=(i-1)*16;j<i*16;j++)
{
a[i]=a[i]*2+(str[j]-'0');
}
}
maxn=0;k=0;
for(int i=1;i<=8;i++)
{
if(a[i]==0)
{
for(int j=i;j<=8;j++)
{
if(a[j]==0)
{
if(j-i+1>maxn||(j-i+1==maxn&&(j!=8||k==1)))//其实有点不太懂这里,明天再看看
{
k=i;
maxn=j-i+1;
}
}
else
break;
}
}
}
}
void work()
{
if(maxn<2)
{
for(int i=1;i<=8;i++)
{
if(i!=8)
printf("%x:",a[i]);
else
printf("%x\n",a[i]);
}
}
else
{
if(k==1&&maxn==8)
{
printf("::\n");
return;
}
for(int i=1;i<k;i++)
{
printf("%x:",a[i]);
}
printf(":");
if(k==1)
printf(":");
if(k+maxn==9)
printf("\n");
for(int i=k+maxn;i<=8;i++)
{
if(i==8)
printf("%x\n",a[i]);
else
printf("%x:",a[i]);
}
}
}
int main()
{
int t;
scanf("%d",&t);
for(int i=1;i<=t;i++)
{
memset(str,0,sizeof(str));
memset(a,0,sizeof(a));
scanf("%s",str);
init();
printf("Case #%d: ",i);
work();
}
return 0;
}