鱼C论坛

 找回密码
 立即注册
查看: 1696|回复: 3

[已解决]C语递归题

[复制链接]
发表于 2023-5-8 19:31:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
输入一个二进制数,当碰到除了'1'和'0'以外的字符停止输入,最后输出所对应的十进制数,并且用递归解决。
最佳答案
2023-5-8 19:31:46
这是一个经典的二进制转十进制的问题,可以使用递归来解决。

以下是示例代码:

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

  3. int binaryToDecimal(char* binary, int len) {
  4.     if (len == 1) {
  5.         return binary[0] - '0';
  6.     } else {
  7.         return (binary[len-1] - '0') + 2 * binaryToDecimal(binary, len-1);
  8.     }
  9. }

  10. int main() {
  11.     char binary[100];
  12.     int len = 0;
  13.     char c = getchar();
  14.     while (c == '0' || c == '1') {
  15.         binary[len++] = c;
  16.         c = getchar();
  17.     }
  18.     printf("%d\n", binaryToDecimal(binary, len));
  19.     return 0;
  20. }
复制代码


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

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

希望这可以解决你的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-5-8 19:31:46 | 显示全部楼层    本楼为最佳答案   
这是一个经典的二进制转十进制的问题,可以使用递归来解决。

以下是示例代码:

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

  3. int binaryToDecimal(char* binary, int len) {
  4.     if (len == 1) {
  5.         return binary[0] - '0';
  6.     } else {
  7.         return (binary[len-1] - '0') + 2 * binaryToDecimal(binary, len-1);
  8.     }
  9. }

  10. int main() {
  11.     char binary[100];
  12.     int len = 0;
  13.     char c = getchar();
  14.     while (c == '0' || c == '1') {
  15.         binary[len++] = c;
  16.         c = getchar();
  17.     }
  18.     printf("%d\n", binaryToDecimal(binary, len));
  19.     return 0;
  20. }
复制代码


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

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

希望这可以解决你的问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-8 19:36:49 | 显示全部楼层
《C语           递归题》
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-8 19:47:40 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <stdlib.h>

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

  4. int main() {
  5.     char s[100];
  6.     int i = 0;
  7.     while (1) {
  8.         char c = getchar();
  9.         if (c == '0' || c == '1') {
  10.             s[i++] = c;
  11.         } else {
  12.             s[i] = '\0';
  13.             break;
  14.         }
  15.     }
  16.     int len = i;
  17.     int result = bi_to_de(s, len, 0);
  18.     printf("%d", result);

  19.     return 0;
  20. }

  21. int bi_to_de(char *s, int len, int index) {
  22.     if (index == len) {
  23.         return 0;
  24.     } else {
  25.         int num = s[index] - '0';
  26.         return num * (1 << (len - index - 1)) + bi_to_de(s, len, index+1);
  27.     }
  28. }
复制代码

有用请设置最佳答案
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 14:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表