鱼C论坛

 找回密码
 立即注册
查看: 385|回复: 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
使用递归实现:

  1. #include <stdio.h>

  2. void dectobin(int n) {
  3.     if (n == 0) {
  4.         return;
  5.     }
  6.     dectobin(n / 2);
  7.     printf("%d", n % 2);
  8. }

  9. int main() {
  10.     int n;
  11.     scanf("%d", &n);
  12.     dectobin(n);
  13.     return 0;
  14. }
复制代码


不使用递归实现:

  1. #include <stdio.h>

  2. void dectobin(int n) {
  3.     int binary[32];
  4.     int i = 0;
  5.     while (n > 0) {
  6.         binary[ i] = n % 2;
  7.         n = n / 2;
  8.         i++;
  9.     }
  10.     for (int j = i - 1; j >= 0; j--) {
  11.         printf("%d", binary[j]);
  12.     }
  13. }

  14. int main() {
  15.     int n;
  16.     scanf("%d", &n);
  17.     dectobin(n);
  18.     return 0;
  19. }
复制代码


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

使用道具 举报

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

  1. #include <stdio.h>

  2. void dectobin(int n) {
  3.     if (n == 0) {
  4.         return;
  5.     }
  6.     dectobin(n / 2);
  7.     printf("%d", n % 2);
  8. }

  9. int main() {
  10.     int n;
  11.     scanf("%d", &n);
  12.     dectobin(n);
  13.     return 0;
  14. }
复制代码


不使用递归实现:

  1. #include <stdio.h>

  2. void dectobin(int n) {
  3.     int binary[32];
  4.     int i = 0;
  5.     while (n > 0) {
  6.         binary[ i] = n % 2;
  7.         n = n / 2;
  8.         i++;
  9.     }
  10.     for (int j = i - 1; j >= 0; j--) {
  11.         printf("%d", binary[j]);
  12.     }
  13. }

  14. int main() {
  15.     int n;
  16.     scanf("%d", &n);
  17.     dectobin(n);
  18.     return 0;
  19. }
复制代码


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

使用道具 举报

发表于 2023-11-17 14:04:43 | 显示全部楼层
使用递归实现
  1. #include <iostream>
  2. using namespace std;
  3. void dectobin(int n) {
  4.     if (n > 1) {
  5.         dectobin(n / 2);
  6.     }
  7.     cout << n % 2;
  8. }
  9. int main() {
  10.     int n;
  11.     cin >> n;
  12.     dectobin(n);
  13.     return 0;
  14. }
复制代码

在递归解决方案中,我们定义了一个名为 dectobin 的函数,该函数将整数 n 作为输入参数。如果 n 大于1,则递归地调用 dectobin 函数并传入 n/2 作为参数。然后,打印 n 对2取余的结果,即二进制位的值。

不使用递归实现
  1. #include <iostream>
  2. using namespace std;
  3. void dectobin(int n) {
  4.     int binary[32]; // 存储二进制位的数组
  5.     int i = 0;
  6.    
  7.     while (n > 0) {
  8.         binary[i] = n % 2;
  9.         n = n / 2;
  10.         i++;
  11.     }
  12.    
  13.     for (int j = i - 1; j >= 0; j--) {
  14.         cout << binary[j];
  15.     }
  16. }
  17. int main() {
  18.     int n;
  19.     cin >> n;
  20.     dectobin(n);
  21.     return 0;
  22. }
复制代码

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

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 07:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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