鱼C论坛

 找回密码
 立即注册
查看: 688|回复: 2

[已解决]本题要求实现一个函数,将非负整数n转换为二进制后输出。

[复制链接]
发表于 2023-11-17 14:02:44 | 显示全部楼层 |阅读模式

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

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

x
本题要求实现一个函数,将非负整数n转换为二进制后输出。

函数接口定义:
void dectobin( int n );
函数dectobin应在一行中打印出二进制的n。建议用递归实现。

裁判测试程序样例:
#include <stdio.h>

void dectobin( int n );

int main()
{
    int n;
   
    scanf("%d", &n);
    dectobin(n);
   
    return 0;
}

/* 你的代码将被嵌在这里 */



这题用递归和不用递归分别怎么写
最佳答案
2023-11-17 14:03:49
使用递归实现:
#include <stdio.h>

void dectobin(int n) {
    if (n == 0) {
        return;
    }
    dectobin(n / 2);
    printf("%d", n % 2);
}

int main() {
    int n;
    scanf("%d", &n);
    dectobin(n);
    return 0;
}

不使用递归实现:
#include <stdio.h>

void dectobin(int n) {
    int binary[32];
    int i = 0;
    while (n > 0) {
        binary[ i] = n % 2;
        n = n / 2;
        i++;
    }
    for (int j = i - 1; j >= 0; j--) {
        printf("%d", binary[j]);
    }
}

int main() {
    int n;
    scanf("%d", &n);
    dectobin(n);
    return 0;
}

在递归实现中,我们使用递归函数将整数n除以2,直到n为0,然后倒序输出余数即可得到二进制表示。在非递归实现中,我们使用一个数组来保存每次除以2的余数,然后倒序输出该数组即可得到二进制表示。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-17 14:03:49 | 显示全部楼层    本楼为最佳答案   
使用递归实现:
#include <stdio.h>

void dectobin(int n) {
    if (n == 0) {
        return;
    }
    dectobin(n / 2);
    printf("%d", n % 2);
}

int main() {
    int n;
    scanf("%d", &n);
    dectobin(n);
    return 0;
}

不使用递归实现:
#include <stdio.h>

void dectobin(int n) {
    int binary[32];
    int i = 0;
    while (n > 0) {
        binary[ i] = n % 2;
        n = n / 2;
        i++;
    }
    for (int j = i - 1; j >= 0; j--) {
        printf("%d", binary[j]);
    }
}

int main() {
    int n;
    scanf("%d", &n);
    dectobin(n);
    return 0;
}

在递归实现中,我们使用递归函数将整数n除以2,直到n为0,然后倒序输出余数即可得到二进制表示。在非递归实现中,我们使用一个数组来保存每次除以2的余数,然后倒序输出该数组即可得到二进制表示。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-17 14:04:43 | 显示全部楼层
使用递归实现
#include <iostream>using namespace std;void dectobin(int n) {    if (n > 1) {        dectobin(n / 2);    }    cout << n % 2;}int main() {    int n;    cin >> n;    dectobin(n);    return 0;}
在递归解决方案中,我们定义了一个名为 dectobin 的函数,该函数将整数 n 作为输入参数。如果 n 大于1,则递归地调用 dectobin 函数并传入 n/2 作为参数。然后,打印 n 对2取余的结果,即二进制位的值。

不使用递归实现
#include <iostream>using namespace std;void dectobin(int n) {    int binary[32]; // 存储二进制位的数组    int i = 0;        while (n > 0) {        binary[i] = n % 2;        n = n / 2;        i++;    }        for (int j = i - 1; j >= 0; j--) {        cout << binary[j];    }}int main() {    int n;    cin >> n;    dectobin(n);    return 0;}
在非递归解决方案中,我们使用一个数组 binary 来存储二进制位的值。通过循环将 n 对2取余并更新 n 和数组 binary,直到 n 变为0。然后,从数组的末尾开始遍历并打印二进制位的值。

这两个解决方案都能将非负整数转换为二进制并按照要求进行输出。

希望这些解决方案对你有帮助。如果你还有其他问题,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 21:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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