代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
char a[7];
char b[7];
int c[3];
cin>>b;
a[0]=b[1];
a[1]=b[2];
int m=16;
int f=0;
for(int i=0;i<strlen(a);i++)
{
f*=m;
if (a[i]=='A'||a[i]=='B'||a[i]=='C'||a[i]=='D'||a[i]=='E'||a[i]=='F')
{
f+=(a[i]-'A'+10);
}
else
{
f+=(a[i]-'0');
}
}
c[1]=f;
a[0]=b[3];
a[1]=b[4];
f=0;
for(int i=0;i<strlen(a);i++)
{
f*=m;
if (a[i]=='A'||a[i]=='B'||a[i]=='C'||a[i]=='D'||a[i]=='E'||a[i]=='F')
{
f+=(a[i]-'A'+10);
}
else
{
f+=(a[i]-'0');
}
}
c[2]=f;
a[0]=b[5];
a[1]=b[6];
f=0;
for(int i=0;i<strlen(a);i++)
{
f*=m;
if (a[i]=='A'||a[i]=='B'||a[i]=='C'||a[i]=='D'||a[i]=='E'||a[i]=='F')
{
f+=(a[i]-'A'+10);
}
else
{
f+=(a[i]-'0');
}
}
c[3]=f;
c[1]=255-c[1];
c[2]=255-c[2];
c[3]=255-c[3];
char d[6];
cout<<'#';
int x=0;
if(c[1]==0)
{
d[0]='0';
d[1]='0';
x=2;
}
else
{
while(c[1]!=0)
{
d[x]=(c[1]%16)+'0';
c[1]=c[1]/16;
if(d[x]>'9')
{
d[x]='A'+(d[x]-'0'-10);
}
x++;
}
}
swap(d[0],d[1]);
if(c[2]==0)
{
d[2]='0';
d[3]='0';
x=4;
}
else
{
while(c[2]!=0)
{
d[x]=(c[2]%16)+'0';
c[2]=c[2]/16;
if(d[x]>'9')
{
d[x]='A'+(d[x]-'0'-10);
}
x++;
}
}
swap(d[2],d[3]);
if(c[3]==0)
{
d[4]='0';
d[5]='0';
}
else
{
while(c[3]!=0)
{
d[x]=(c[3]%16)+'0';
c[3]=c[3]/16;
if(d[x]>'9')
{
d[x]='A'+(d[x]-'0'-10);
}
x++;
}
}
swap(d[4],d[5]);
cout<<d;
return 0;
}
主要思路是16进制转10进制,进行反转之后再转回16进制输出。