鱼C论坛

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

[已解决]C语递归题

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

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

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

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

以下是示例代码:
#include <stdio.h>
#include <stdlib.h>

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

int main() {
    char binary[100];
    int len = 0;
    char c = getchar();
    while (c == '0' || c == '1') {
        binary[len++] = 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 函数,并将结果打印到控制台上。

希望这可以解决你的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

以下是示例代码:
#include <stdio.h>
#include <stdlib.h>

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

int main() {
    char binary[100];
    int len = 0;
    char c = getchar();
    while (c == '0' || c == '1') {
        binary[len++] = 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 函数,并将结果打印到控制台上。

希望这可以解决你的问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-8 19:36:49 | 显示全部楼层
《C语           递归题》
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[100];
    int i = 0;
    while (1) {
        char c = getchar();
        if (c == '0' || c == '1') {
            s[i++] = c;
        } else {
            s[i] = '\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[index] - '0';
        return num * (1 << (len - index - 1)) + bi_to_de(s, len, index+1);
    }
}
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 01:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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