我正在尝试取一个数字并将其更改为:
Number Change To
1 0001A
2 0002A
3 0003A
4 0001B
5 0002B
6 0003B
7 0001C
8 0002C
9 0003C
10 0001AA
11 0002AA
12 0003AA
13 0001AB
14 0002AB
15 0003AB
10 0001AC
11 0002AC
12 0003AC
13 0001BA
14 0002BA
15 0003BA
等...
所以使用字母'A','B','C' 并使用数字1,2,3
答案 0 :(得分:0)
对于大多数输入,最左边的“数字”似乎变化最快,直到你进入12-> 13过渡,其中中间数字变化最慢:
1A
2A
3A
...
2AA
3AA
1AB
2AB
...
这绝对是尴尬的,并且可能需要花费大量额外的代码来进行编码,而不是最严格遵循最右边或最左边数字变化的方案:
1A
2A
3A
...
2AA
3AA
1BA
2BA
...
或
1
2
3
a
b
c
11
12
13
1a
1b
1c
21
22
23
...
如果您必须完全遵循此处给出的方案,那么我建议使用查找表,只需将此方案硬编码到您的源代码中:
#include <stdio.h>
int main(int argc, char* argv[]) {
char table[][5]={"ZERO", "1A", "2A", "3A", "1B", "2B", "3B", "1C", "2C", "3C",
"1AA", "2AA", "3AA", "1AB", "2AB", "3AB", "1AC", "2AC", "3AC"};
int i;
for (i=1; i<argc; i++) {
int input=atoi(argv[i]);
printf("%d\t%s\n", input, table[input]);
}
return 0;
}
请不要直接使用此代码 - 我还没有完成任何输入验证或数组边界检查。
当然,我希望你完全选择一种不同的方法 - 这种简单的代码字替换适用于特定数量的输入,但有一天有人可能想输入一个比你表中更大的数字。 (在这种情况下,当有人想转换19
时,它就会失败。)
更通用的方法converting between bases是一种用于在任意两个数字基数之间进行转换的算法。在您的情况下, 可以转换为基数6,数字为1
,2
,3
,A
,B
,C
(如果您严格遵守最左侧更改或最右侧更改最快的方法)。