| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 10806 人关注过本帖
标题:编写C递归函数,将给定的十进制整数,转换为该数值的二进制表示(32位)
只看楼主 加入收藏
billjyc
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-12-15
结帖率:100%
收藏
 问题点数:0 回复次数:6 
编写C递归函数,将给定的十进制整数,转换为该数值的二进制表示(32位)
求指教
搜索更多相关主题的帖子: 二进制 十进制 
2011-12-25 12:14
cqm9266
Rank: 3Rank: 3
来 自:福建
等 级:论坛游侠
帖 子:174
专家分:186
注 册:2011-10-28
收藏
得分:0 
#include<stdio.h>
long int change(long int n,long int sum)
{long int a,d,b=1,i;
if(n==1) return(sum+1);
else
{for(a=2,i=1;2*a<=n;a=2*a,i++);
     for(d=1;d<=i;d++) b=b*10;
     sum=sum+b;
     if(a==n)
         return(sum);
     else
     {b=1;change((n-a),sum);}
}
}
void main()
{printf("输入一个10进制的数字,请别太大 因为该算法局限有被long int局限\n");
long int n,sum;
scanf("%d",&n);
sum=change(n,0);
printf("输出的二进制是%d\n",sum);
}
我这个代码就是用递归转化成二进制的 但是我用的不是用比如  10转化二进制 用 10/2的余数的 来求 我是用最基本的2=10(二进制) 所以只能求到1000多十进制

没病的人说有病的人有病,有病的人说没病的人有病。到底是谁有病?
2011-12-25 13:07
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 楼主 billjyc
写了个,你看下有什么缺点。
#include <stdio.h>
int main (void)
{
   
    int  n, i, r;
    int a[32] = { 0 }, b[32] = { 0 },k = 0;
   
    while (888)
    {
    printf("\n请输入一个十进制整数:");
    scanf("%d", &n);
    while (n  > 2147483647 || n < -2147483648)
    {
        printf("\n越界,请重新输入:");     // 奇怪越界的数无法拦截,直接变成负数处理?
        scanf("%d", &n);
    }

    if (n == 0)
    {
        printf("\n0的原码和补码都是:  ");
        for (i = 31; i >= 0; i--)
        {  
            if(i == 23 || i == 15 || i == 7)
            printf(" ");
            printf("%d", a[i]);
        }
        printf("\n");
    }
   else  if (n > 0)
    {
        while (n != 0)
        {
             r = n % 2;
            b[k++] = r;
            n = n / 2;
        }
        printf("\n正整数n的原码是:     ");
        for (i = 31; i >= 0; i-- )
        {
            if(i == 23 || i == 15 || i == 7)
            printf(" ");
            printf("%d", b[i]);
        }
        printf("\n");
    }
    else if(n < 0)
    {   
        printf("\n负数用补码表示:");
        n = -n;
          while (n != 0)
          {
             r =  n % 2;
            b[k++] = r;
            n =  n / 2;
          }
        for (i = 31; i >= 0; i--)  a[i] = 1;
        for (i = 31; i >= 0; i--)  a[i] = a[i] - b[i];
        for (i = 0; a[i] == 1; i++)  
          {
            a[i] = 0;
          }
            a[i] = 1;
        printf("\n负整数n的补码表示是:   ");
        for (i = 31; i >= 0; i--)
        {
            if(i == 23 || i == 15 || i == 7)
            printf(" ");
            printf("%d", a[i]);
        }
        printf("\n");
    }
    }
     return  0;
}



[ 本帖最后由 有容就大 于 2011-12-25 19:35 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2011-12-25 18:24
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
都有点长,用不着那么复杂
程序代码:
#include<stdio.h>
void output(unsigned int n)
{
    if(n)
    {
        output(n >> 1);
        putchar('0' + (n & 1));
    }
}
int main()
{
    int n;
    scanf("%d", &n);
    if(n) output(n); else putchar('0');
    return 0;
}

重剑无锋,大巧不工
2011-12-25 18:43
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 4楼 beyondyf
位运算?具体怎么玩?不解释下搞不懂呢。

梅尚程荀
马谭杨奚







                                                       
2011-12-25 19:39
billjyc
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-12-15
收藏
得分:0 
回复 4楼 beyondyf
怎么把二进制数编程32位输出啊?
2011-12-25 20:40
billjyc
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2011-12-15
收藏
得分:0 
回复 4楼 beyondyf
如果非要用递归呢,这段代码有什么问题
 #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:39
快速回复:编写C递归函数,将给定的十进制整数,转换为该数值的二进制表示(32位) ...
数据加载中...
 
   



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

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