双生独白
题目背景
我喜欢安静,你热爱喧闹;我忠于温暖,你酷爱凉爽。
如果任何事物都有反面,那拼接这个世界的颜色呢?
只有白与黑吗?
题目描述
为了形式化地描述颜色,我们引入 RGB 颜色值,用三元组 ( r , g , b ) (r,g,b) (r,g,b) 表示一种颜色,其中 r , g , b r,g,b r,g,b 分别为该颜色的 R 值、G 值、B 值,满足 0 ≤ r , g , b ≤ 255 0 \le r,g,b \le 255 0≤r,g,b≤255 且皆为十进制整数。
显然,这套颜色系统一共可以表示 256 × 256 × 256 = 16 777 216 256 \times 256 \times 256 = 16\,777\,216 256×256×256=16777216 种不同的颜色。对于颜色 ( r , g , b ) (r,g,b) (r,g,b),定义其反色的 RGB 颜色值为 ( 255 − r , 255 − g , 255 − b ) (255-r,255-g,255-b) (255−r,255−g,255−b)。
然而人们发现,单纯地使用 RGB 颜色值很不方便,复制颜色时要复制三个值。
于是诞生了十六进制颜色码,即形如 #EBA932
长度为
7
7
7 的字符串。具体而言:
- 字符串的第一位是
#
,为颜色码标识符。 - 字符串的第二、三位是十六进制数码,拼成的十六进制数等于十进制下所示颜色的 R 值。
- 字符串的第四、五位是十六进制数码,拼成的十六进制数等于十进制下所示颜色的 G 值。
- 字符串的第六、七位是十六进制数码,拼成的十六进制数等于十进制下所示颜色的 B 值。
十六进制数码从小到大包含 0
,1
,2
,3
,4
,5
,6
,7
,8
,9
,A
,B
,C
,D
,E
,F
,注意 A
,B
,C
,D
,E
,F
均为大写。
现在你收到了一组十六进制颜色码,请你输出其反色的十六进制颜色码。
提示:颜色的 RGB 值与十六进制码之间可以相互转换(参考样例解释 #2)
输入格式
一行,输入长度为 7 7 7 的字符串,表示原色的十六进制颜色码。
输出格式
一行,输出长度为 7 7 7 的字符串,表示反色的十六进制颜色码。
样例 #1
样例输入 #1
#FFFFFF
样例输出 #1
#000000
样例 #2
样例输入 #2
#EBA932
样例输出 #2
#1456CD
提示说明
注意:经过查阅资料,发现可以用 scanf(“%2d”, &a) 控制只读取两位数字,printf(“%02d”, a) 控制输出两位数字并补前导
0。
【样例解释 #1】
转换后原色的 RGB 值为
(
255
,
255
,
255
)
(255,255,255)
(255,255,255),反色的 RGB 值为
(
0
,
0
,
0
)
(0,0,0)
(0,0,0),对应十六进制码 #000000
。
【样例解释 #2】
转换后原色的 RGB 值为
(
235
,
169
,
50
)
(235,169,50)
(235,169,50),反色的 RGB 值为
(
20
,
86
,
205
)
(20,86,205)
(20,86,205),对应十六进制码 #1456CD
。
为避免理解偏差,此处特别解释 #EBA932
转换后 B 值为
50
50
50 的原因:提取字符串的第六、七位,拼成的十六进制数为
(
32
)
16
(32)_{16}
(32)16,则有
(
32
)
16
=
3
×
1
6
1
+
2
×
1
6
0
=
50
(32)_{16} = 3 \times 16^1 + 2 \times 16^0 = 50
(32)16=3×161+2×160=50。
【数据规模与约定】
本题共有 10 个测试点,每通过一个测试点可获得 10 points。
对于 10 % 10\% 10% 的数据,为样例 #1。
对于另外 30 % 30\% 30% 的数据,输入与输出字符串均不包含大写字母。
对于所有的数据,保证给定字符串为合法十六进制颜色码。
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
char s[10];
int main()
{
scanf("%s",s);
putchar('#');
for(int i=1,x;i<6;i+=2)
{
sscanf(s+i,"%2x",&x);
printf("%02X",255-x);
}
return 0;
}