c - 如何递归解码给定整数的单词?

标签 c recursion encoding decoding

每个字母都分配有一个与其在字母表中的位置相对应的数字。 “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/

相关文章:

c - 从 C 中的线程数组返回?

c - 如何获取陷入无限循环的 C 程序的代码覆盖率信息?

c - sys open 不使用 c 中的指针

recursion - 甚至? Scheme 中的函数(Dr. Racket)

c - 检测文件描述符是否是solaris 11.0中的套接字并提取ip地址

java - 如何在Java中递归计算二维数组列

c++ - 如何为递归函数编写方法定义?

javascript - 在 IE8 中使用 "Save As"execCommand 以 ANSI 格式而不是 UCS2-Little Endian 格式保存 XML 文件

python - 在 python 中处理非 ascii 代码字符串

file - 打开输入 VB 时指定编码