| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 804 人关注过本帖
标题:编写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
快速回复:编写C递归函数,将给定的十进制整数,转换为该数值的二进制表示(32位) ...
数据加载中...
 
   



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

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