PAT甲级真题1027 Colors in Mars 【字符串+进制转换】题解
目录
- 1.题目
- 2.代码
1.题目
火星人以与地球人相似的方式在计算机中表示颜色。
也就是说,颜色由 6 位数字表示,其中前 2 位数字代表红色®,中 2 位数字代表绿色(G),后 2 位数字代表蓝色(B)。
与我们的区别在于,他们使用 13 进制(0∼9 和 A∼C)来表示颜色值。
现在给定三个用来表示颜色值的十进制数字(数字范围在 [0,168] 之间),请你输出他们的火星 RGB 颜色值。
输入格式
包含三个十进制整数,分别表示十进制下的 R、G、B 颜色值。
输出格式
共一行,先输出一个 “#”,然后输出一个 6 位数字表示火星 RGB 颜色值。
如果某一种颜色的数值换算为 13 进制后,不足 2 位,则在前面补 0,凑足 2 位。
输入样例:15
43
71
输出样例:#123456
样例解释
给定的三个数字 15,
43
,71
在 13 进制下的表示分别是 12
,34
,56
。
所以将它们组合起来,答案即为#123456
。
2.代码
了解一个函数的用法:
reverse函数用于反转在[first,last)范围内的顺序 (包括first指向的元素,不包括last指向的元素)
如:
string str="www.mathor.top";
reverse(str.begin(),str.end());//str结果为pot.rohtam.wwww
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
string calc(int n) //进制转换
{
string str;
while(n)
{
if(n%13<=9)
str+=n%13 +'0';
else
str+=n%13- 10 +'A';
n/=13;
}
reverse(str.begin(),str.end()); //将字符串翻转
while(str.size()<2) str='0'+str; //不足二位,补零
return str;
}
int main()
{
int a[3];
cin>>a[1]>>a[2]>>a[3];
cout<<'#';
for(int i=1;i<=3;i++)
{
cout<<calc(a[i]);
}
cout<<endl;
return 0;
}
还没有评论,来说两句吧...