ZxZ. 发表于 2023-5-8 19:31:06

C语递归题

输入一个二进制数,当碰到除了'1'和'0'以外的字符停止输入,最后输出所对应的十进制数,并且用递归解决。

isdkz 发表于 2023-5-8 19:31:46

这是一个经典的二进制转十进制的问题,可以使用递归来解决。

以下是示例代码:

#include <stdio.h>
#include <stdlib.h>

int binaryToDecimal(char* binary, int len) {
    if (len == 1) {
      return binary - '0';
    } else {
      return (binary - '0') + 2 * binaryToDecimal(binary, len-1);
    }
}

int main() {
    char binary;
    int len = 0;
    char c = getchar();
    while (c == '0' || c == '1') {
      binary = c;
      c = getchar();
    }
    printf("%d\n", binaryToDecimal(binary, len));
    return 0;
}


首先,我们定义了一个函数 binaryToDecimal ,它接受一个二进制字符串和字符串长度作为参数,并返回对应的十进制数。在函数内部,我们首先检查字符串长度是否为1。如果是,直接返回该字符对应的数字。否则,我们将字符串的最后一位转换为数字,并将其乘以2的n-1次方,其中n是字符串长度。然后,我们递归调用 binaryToDecimal 函数,将字符串长度减1,继续计算剩余部分的十进制值。最后,将两个值相加并返回。

在 main 函数中,我们首先声明一个字符数组 binary 和一个整数变量 len ,用于存储输入的二进制字符串和字符串长度。然后,我们使用 getchar 函数逐个字符读取输入,直到遇到除了'1'和'0'以外的字符为止。然后,我们调用 binaryToDecimal 函数,并将结果打印到控制台上。

希望这可以解决你的问题。

歌者文明清理员 发表于 2023-5-8 19:36:49

《C语         递归题》

sfqxx 发表于 2023-5-8 19:47:40

#include <stdio.h>
#include <stdlib.h>

int bi_to_de(char *s, int len, int index);

int main() {
    char s;
    int i = 0;
    while (1) {
      char c = getchar();
      if (c == '0' || c == '1') {
            s = c;
      } else {
            s = '\0';
            break;
      }
    }
    int len = i;
    int result = bi_to_de(s, len, 0);
    printf("%d", result);

    return 0;
}

int bi_to_de(char *s, int len, int index) {
    if (index == len) {
      return 0;
    } else {
      int num = s - '0';
      return num * (1 << (len - index - 1)) + bi_to_de(s, len, index+1);
    }
}

有用请设置最佳答案
页: [1]
查看完整版本: C语递归题