每个字母都分配有一个与其在字母表中的位置相对应的数字。 “a”为 0,“b”为 1,“c”为 2,等等。
所有字母均为小写
单字母单词的编码是它的数字。
如果一个单词的前n-1个字母的编码为x,第n个字母的编码为m,则该n个字母的单词的编码为x*26+m。
我理解的逻辑是这样的:
如果单词仅包含单个字母,则编码介于 0 到 25 之间。
如果单词包含两个字母,则取第一个字母*26+第二个字母
如果单词包含三个字母,则(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);
}
}
最佳答案
你有公式
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 才能在输出中获得正确的字母顺序。
关于c - 如何递归解码给定整数的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41708435/