每个字母都分配一个与其在字母表中的位置相对应的数字。 '一个'是0,' b'是1,' c'是2等。
所有字母均为小写
一个字母的单词编码就是它的编号。
如果一个单词的前n-1个字母的编码是x,并且第n个字母的编码是m,那么n个字母单词的编码是x * 26 + m。
我明白逻辑是这样的:
如果单词只包含一个字母,则编码介于0到25之间。
如果单词包含两个字母,请参阅第一个字母* 26 + secondletter
如果单词包含三个字母,则(firstletter * 26 + secondletter)* 26 + thirdletter
等等,直到你编码完整的东西。
我不知道如何通过基本案例。请帮忙!
这是我到目前为止所做的:
char print_letter(unsigned int number)
{
char c = number + 97;
if (number <= 25)
{
printf("%c\n", c);
return(c);
}
else
{
fprintf(stderr, "ERROR: print_letter: Received "
"input %d,", number);
fprintf(stderr, " between 0 and 25 expected.");
return('-');
}
}
void print_word(unsigned int number)
{
if(number <= 25)
print_letter(number);
else
{
print_letter((number / 26) % 26);
print_word(number / 26);
}
}
答案 0 :(得分:0)
你有公式
number = x*26+m
现在你有了数字,想要计算x和m。如何去做?
m = number % 26
x = (number - m) / 26
所以你的代码必须如下所示:
void print_word(unsigned int number)
{
if(number <= 25)
print_letter(number);
else
{
int m = number % 26;
int x = (number - m) / 26;
print_word(x);
print_letter(m);
}
}
请注意,您必须在print_letter之前调用print_word,以使输出中的字母顺序正确。