题目描述
RGB 是一种颜色模型,它通过红色、绿色和蓝色的组合来定义颜色。RGB 元组由指定每种颜色强度的三个数字组成。因为它对每种颜色使用 8 位( 0 或 1 ),所以每个强度可以转换为最多两位的十六进制数。
每种颜色有 256 种可能的色调,因为 11111111 (或十六进制 ff )对应于十进制的 255 ,加上数字 000 。三种原色的所有 256 种可能的色调组合得到 256 立方,或超过 1600 万可能的颜色。
编写一个函数,采用 RGB 或十六进制的颜色并返回相反的颜色。如果它在一个 RGB 元组中接收三个整数,它应该返回一个具有等效十六进制表示法的字符串。如果它接受一个十六进制的字符串,它应该返回一个字符串,其中包含对应于 RGB 的三个整数,每个数中间用逗号隔开。
输入输出格式
输入格式
有两种输入方式
第一种:
第一行有 R ,表示红色的值。
第二行有 G ,表示绿色的值。
第二行有 B ,表示蓝色的值。
第二种:
输入一行能标识颜色的字符串。
比如: #500d01 。
输出格式
如果接收的是三个整数那么输出 16 进制字符串的数据,如 #96324c 。
如果接收的是一个字符串那么返回一个元组。
输入输出样例1
输入
150
50
76
输出
#96324c
输入输出样例2
输入
15
59
122
输出
#0f3b7a
输入输出样例3
输入
#500d01
输出
80,13,1
说明提示
黑色被定义为没有颜色,或 RGB ( 0 , 0 , 0 ),而白色被定义为全强度的所有颜色,或 RGB ( 255 , 255 , 255 )。当所有颜色的强度相同且某个值介于 0 和 255 之间时,生成的颜色为较深或较浅的灰色。
#include <iostream>
#include <sstream>
#include <iomanip>
#include <string>
using namespace std;
int main() {
string s, p = "#", t;
cin >> s;
int a, b, c;
int len = s.length();
if (s[0] != '#') {
// 如果输入的是十进制颜色值
cin >> b >> c;
a = stoi(s); // 使用 stoi 转换十进制的数字
stringstream ss;
ss << hex << setw(2) << setfill('0') << a;
p += ss.str();
ss.str(""); // 清空stringstream
ss << hex << setw(2) << setfill('0') << b;
p += ss.str();
ss.str(""); // 清空stringstream
ss << hex << setw(2) << setfill('0') << c;
p += ss.str();
cout << p;
} else {
// 如果输入的是十六进制颜色值
t = s.substr(1, 2); // 获取红色部分
a = stoi(t, nullptr, 16);
t = s.substr(3, 2); // 获取绿色部分
b = stoi(t, nullptr, 16);
t = s.substr(5, 2); // 获取蓝色部分
c = stoi(t, nullptr, 16);
cout << a << "," << b << "," << c;
}
return 0;
}
标签:十六进制,颜色,五颜六色,RGB,字符串,输入,255 From: https://blog.csdn.net/2301_80470126/article/details/144083792