标题:编写C递归函数,将给定的十进制整数,转换为该数值的二进制表示(32位)
只看楼主
billjyc
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-12-15
结帖率:100%
 问题点数:0 回复次数:3 
编写C递归函数,将给定的十进制整数,转换为该数值的二进制表示(32位)
我现在很头疼,转化成二进制容易,但是如何把它变成32位??还得是用递归函数,是要用数组吗?
搜索更多相关主题的帖子: 头疼 二进制 十进制 如何 
2011-12-25 21:59
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
那也用不着再开一个贴子吧。非诚勿扰广告时间,直接写一个,不调试了。之前我还以为你非要递归的呢。
#include<stdio.h>
int main()
{
  int i, n;
  scanf("%d", &n);
  for(i = 31; i >= 0; i--)
    printf("%d", (n >> i) & 1);
  return 0;
}

重剑无锋,大巧不工
2011-12-25 22:24
billjyc
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-12-15
得分:0 
回复 楼主 billjyc
如果非要用递归呢,这段代码有什么问题
#include<stdio.h>

void TenToBi(int a,int i);

int main(){
  int b,i=0;

  printf("please input the number you want to transform:\n");
  scanf("%d",&b);

  TenToBi(b,i);

  
}

void TenToBi(int b,int i){
  int d,e,sb[32]={0};

  if(i<=31){
    d=b/2;
    e=b%2;
    sb[i]=e;
    i++;
    TenToBi(d,i);
  }
  else{
    for(i=31;i>=0;i--)
      printf("%d",sb[i]);
  }
}
2011-12-25 22:34
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
得分:0 
你对递归的执行机理掌握还不够,这里建议你学一点汇编,了解一下子程序是怎么跳转的,参数和返回值是如何传递的,什么是现场的入栈保护,以及局部变量是怎么保存的。
你的数组用法没有按你想像的情况工作。你需要的是一个静态或者全局数组。
不过这个问题确实用不着数组。
程序代码:
#include<stdio.h>
void output(unsigned int n, int i)
{
    if(i)
    {
        output(n >> 1, i - 1);
        putchar('0' + (n & 1));
    }
}
int main()
{
    int n;
    scanf("%d", &n);
    output(n, 32);
    return 0;
}

重剑无锋,大巧不工
2011-12-25 23:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-358624-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.194861 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved