yangzhixiaohuli 发表于 2023-11-17 14:02:44

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

本题要求实现一个函数,将非负整数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;
}

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



这题用递归和不用递归分别怎么写

isdkz 发表于 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;
    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);
    }
}

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


在递归实现中,我们使用递归函数将整数n除以2,直到n为0,然后倒序输出余数即可得到二进制表示。在非递归实现中,我们使用一个数组来保存每次除以2的余数,然后倒序输出该数组即可得到二进制表示。

Mike_python小 发表于 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; // 存储二进制位的数组
    int i = 0;
   
    while (n > 0) {
      binary = n % 2;
      n = n / 2;
      i++;
    }
   
    for (int j = i - 1; j >= 0; j--) {
      cout << binary;
    }
}

int main() {
    int n;
    cin >> n;
    dectobin(n);
    return 0;
}


在非递归解决方案中,我们使用一个数组 binary 来存储二进制位的值。通过循环将 n 对2取余并更新 n 和数组 binary,直到 n 变为0。然后,从数组的末尾开始遍历并打印二进制位的值。

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

希望这些解决方案对你有帮助。如果你还有其他问题,请随时提问。
页: [1]
查看完整版本: 本题要求实现一个函数,将非负整数n转换为二进制后输出。