鱼C论坛

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

求助一下

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

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

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

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;
}

/* 你的代码将被嵌在这里 */
输入样例:
10
输出样例:
1010
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
C (gcc)
1


这题用递归和不用递归分别怎么写
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-11-26 03:04:03 | 显示全部楼层
@FishC_GPT

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

函数接口定义:void dectobin( int n );

函数dectobin应在一行中打印出二进制的n。建议用递归实现。

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

  2. void dectobin( int n );

  3. int main()
  4. {
  5.     int n;
  6.    
  7.     scanf("%d", &n);
  8.     dectobin(n);
  9.    
  10.     return 0;
  11. }
复制代码


/* 你的代码将被嵌在这里 */
输入样例:
10
输出样例:
1010
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
C (gcc)
1


这题用递归和不用递归分别怎么写
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-26 03:04:25 | 显示全部楼层
小甲鱼的二师兄 发表于 2023-11-26 03:04
@FishC_GPT

本题要求实现一个函数,将非负整数n转 ...

使用递归的方式来实现将非负整数转换为二进制的函数,我们可以按照以下步骤进行:

1. 创建一个递归函数`dectobinRecursive`,它接受两个参数:当前要处理的整数`n`和表示二进制的字符串`s`。
2. 在递归函数中,首先判断`n`是否等于0,如果是,则打印出字符串`s`并返回。
3. 否则,用`n`对2取余数,得到最低位的二进制数字,将其转换成字符插入到字符串`s`的最前面。
4. 然后,用`n`除以2,得到`n`去掉最低位后的结果,作为下一次递归的参数。
5. 递归调用`dectobinRecursive`函数,传入更新后的`n`和`s`。
6. 在最外层的函数`dectobin`中,初始化一个空字符串,然后调用`dectobinRecursive`函数,并打印最终结果。

下面是使用递归方式实现的完整代码:
  1. #include <stdio.h>
  2. void dectobinRecursive(int n, char *s) {
  3.     if (n == 0) {
  4.         printf("%s", s);
  5.         return;
  6.     }
  7.    
  8.     // 将最低位的二进制数字转换成字符并插入到字符串s的最前面
  9.     char bit = (n % 2) + '0';
  10.     *s = bit;
  11.     s++;  // 移动指针,指向下一个位置
  12.    
  13.     // 递归调用,传入更新后的n和s
  14.     dectobinRecursive(n / 2, s);
  15. }
  16. void dectobin(int n) {
  17.     char s[32];  // 假设整数最多32位
  18.     dectobinRecursive(n, s);
  19. }
  20. int main() {
  21.     int n;
  22.     scanf("%d", &n);
  23.     dectobin(n);
  24.     return 0;
  25. }
复制代码

使用递归方式可以方便地将一个整数转换为对应的二进制字符串。

如果不使用递归,也可以使用循环来实现这个功能。具体步骤如下:

1. 创建一个空字符串`s`,用于保存转换后的二进制表示。
2. 使用循环从最高位开始,依次计算出每一位的二进制数字,并将其转换成字符插入到字符串`s`的最前面。
3. 直到整数`n`等于0为止,循环结束。
4. 打印字符串`s`,即得到了转换后的二进制表示。

下面是不使用递归的实现方式的完整代码:
  1. #include <stdio.h>
  2. void dectobin(int n) {
  3.     char s[32];  // 假设整数最多32位
  4.     int idx = 0; // 表示当前要插入字符的位置
  5.    
  6.     while (n) {
  7.         char bit = (n % 2) + '0';
  8.         s[idx] = bit;
  9.         idx++;
  10.         n /= 2;
  11.     }
  12.    
  13.     // 当n为0时,直接输出0
  14.     if (idx == 0) {
  15.         printf("0");
  16.     }
  17.    
  18.     for (int i = idx - 1; i >= 0; i--) {
  19.         printf("%c", s[i]);
  20.     }
  21. }
  22. int main() {
  23.     int n;
  24.     scanf("%d", &n);
  25.     dectobin(n);
  26.     return 0;
  27. }
复制代码

这样就能得到和递归方式相同的结果,但是不使用递归的实现方式更容易理解。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-21 15:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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