People in Mars represent the colors in their computers in a similar way as the Earth people. That is, a color is represented by a 6-digit number, where the first 2 digits are for Red
, the middle 2 digits for Green
, and the last 2 digits for Blue
. The only difference is that they use radix 13 (0-9 and A-C) instead of 16. Now given a color in three decimal numbers (each between 0 and 168), you are supposed to output their Mars RGB values.
Input Specification:
Each input file contains one test case which occupies a line containing the three decimal color values.
Output Specification:
For each test case you should output the Mars RGB value in the following format: first output #
, then followed by a 6-digit number where all the English characters must be upper-cased. If a single color is only 1-digit long, you must print a 0
to its left.
Sample Input:
15 43 71
Sample Output:
#123456
解题思路
给定 3个int类型的整数,依次转化为13进制的数字组合,并在前面加上 #
解题代码
记录一下解题过程~
-
部分AC
#include <cstdio> #include <algorithm> #include <iostream> using namespace std; char c[15] = "0123456789ABC"; int a; string s, ans; int main(){ for (int i = 0; i < 3; i++) { string s = ""; scanf("%d", &a); while(a > 0){ s += c[a % 13]; a /= 13; } reverse(s.begin(), s.end()); ans += s; } printf("#%s", ans.c_str()); return 0; }
一开始我以为一遍过的题目,但是交上去存在问题 (测试点 2 3 4 存在问题),定式思维地按照1019的写法转化的进制方法, 这样写存在两个问题。
- 如果输入的数小于13,那么表示的数字就应该是1位,但是此时循环的while( a > 0 ),所以此时前面的0就添加不上去,例如 输入
1 1 1
结果返回#111
。 应当考虑此种情况 。测试点 2 3 4 就是出现个位数字的case - 使用while循环的方法,得到数字顺序是逆序的,而需要求出的13进制 只有两位,得到答案还需要
reverse
,这样写过于繁琐。直接除去循环正向枚举反而更加方便。
- 如果输入的数小于13,那么表示的数字就应该是1位,但是此时循环的while( a > 0 ),所以此时前面的0就添加不上去,例如 输入
-
改正:
#include <cstdio> #include <iostream> using namespace std; char c[15] = "0123456789ABC"; int a; string s; int main(){ for (int i = 0; i < 3; i++) { scanf("%d", &a); s += c[a / 13], s += c[a % 13]; } printf("#%s", s.c_str()); return 0; }
通过字符串 也可以直接表示,不需要
string
的拼接,可以进一步简化过程~ -
简化:
#include <cstdio> char c[15] = "0123456789ABC"; int a; int main(){ printf("#"); for (int i = 0; i < 3; i++) { scanf("%d", &a); printf("%c%c", c[a / 13], c[a % 13]); } return 0; }
总结:实现代码的简洁都是一步一步滴,不可能一开始就写出来最优的解法。还是需要多练,多实践!