PAT甲级真题1027 Colors in Mars 【字符串+进制转换】题解

朱雀 2021-07-24 14:13 371阅读 0赞

目录

      • 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指向的元素)
如:

  1. string str="www.mathor.top";
  2. reverse(str.begin(),str.end());//str结果为pot.rohtam.wwww
  3. #include<iostream>
  4. #include<cstdio>
  5. #include<algorithm>
  6. #include<string>
  7. using namespace std;
  8. string calc(int n) //进制转换
  9. {
  10. string str;
  11. while(n)
  12. {
  13. if(n%13<=9)
  14. str+=n%13 +'0';
  15. else
  16. str+=n%13- 10 +'A';
  17. n/=13;
  18. }
  19. reverse(str.begin(),str.end()); //将字符串翻转
  20. while(str.size()<2) str='0'+str; //不足二位,补零
  21. return str;
  22. }
  23. int main()
  24. {
  25. int a[3];
  26. cin>>a[1]>>a[2]>>a[3];
  27. cout<<'#';
  28. for(int i=1;i<=3;i++)
  29. {
  30. cout<<calc(a[i]);
  31. }
  32. cout<<endl;
  33. return 0;
  34. }

发表评论

表情:
评论列表 (有 0 条评论,371人围观)

还没有评论,来说两句吧...

相关阅读