hi.双生独白

双生独白

题目背景

我喜欢安静,你热爱喧闹;我忠于温暖,你酷爱凉爽。

如果任何事物都有反面,那拼接这个世界的颜色呢?

只有白与黑吗?

题目描述

为了形式化地描述颜色,我们引入 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 0r,g,b255 且皆为十进制整数

显然,这套颜色系统一共可以表示 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) (255r,255g,255b)

然而人们发现,单纯地使用 RGB 颜色值很不方便,复制颜色时要复制三个值。

于是诞生了十六进制颜色码,即形如 #EBA932 长度为 7 7 7 的字符串。具体而言:

  • 字符串的第一位是 #,为颜色码标识符。
  • 字符串的第二、三位是十六进制数码,拼成的十六进制数等于十进制下所示颜色的 R 值。
  • 字符串的第四、五位是十六进制数码,拼成的十六进制数等于十进制下所示颜色的 G 值。
  • 字符串的第六、七位是十六进制数码,拼成的十六进制数等于十进制下所示颜色的 B 值。

十六进制数码从小到大包含 0123456789ABCDEF,注意 ABCDEF 均为大写

现在你收到了一组十六进制颜色码,请你输出其反色的十六进制颜色码。

提示:颜色的 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pretty Boy Fox

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值