| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1586 人关注过本帖
标题:十进制转二进制的程序...(限制溢出...呵呵..)
取消只看楼主 加入收藏
peanut_acer
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2009-8-12
结帖率:100%
收藏
 问题点数:0 回复次数:4 
十进制转二进制的程序...(限制溢出...呵呵..)
#include <stdio.h>
#include <string.h>

void outint(int);
void outfloat(float ,int );


int main()
{
    float num;
    int i,count;
    float f;
    printf("Please enter a decimal count:");
    scanf("%f",&num);
    if(num>10240.0||num<-10240)
    {
        printf(" You must use a high-level calculator,I can't help you!!!!\n");
        exit(1);
    }
    i=num;
    f=num-i;
    if(f!=0)
    {
        printf("How many decimal do you want to retain:");
        scanf("%d",&count);
        printf("The count entered by you has been changed,look!!!-->:");
        if(i!=0)
            outint(i);
        else
            printf("0");
        outfloat(f,count);
    }
    else if(i!=0)
        outint(i);
    else
        printf("0");
    printf("B\n");
   

}


void outint(int i)
{
    int a[32],m=0,n=0,mod;
    int next=0;
    if(i>=0)
    {
        while(i/2>=1)
        {
            a[next]=i%2;
            //printf("%d",a[next]);
            ++next;
            i/=2;
        }
        a[next]=1;
        next++;
        a[next]=0;
        //printf("%d",a[next]);
        //printf("%d\n",a[0]);
        //printf("%d\n",next);
    }
    else
    {   
        i*=-1;
        while(i/2>=1)
        {
            a[next]=i%2;
            //printf("%d",a[next]);
            ++next;
            i/=2;
        }
        a[next]=1;
        next++;
        a[next]=1;
    }        
   
    for(m=0;m<=next-m;m++)
    {
        mod=a[m];
        a[m]=a[next-m];
        a[next-m]=mod;
    }
    for(m=0;m<=next;m++)
        printf("%d",a[m]);
}



void outfloat(float f,int count)
{
    int a[32],next=0,i;
    printf(".");
    while(f*2.0!=1.0)
    {
        if(f*2.0>1.0)
        {
            a[next]=1;
            next++;
            f=f*2.0-1.0;
        }
        else
        {
            a[next]=0;
            next++;
            f=f*2.0;
        }
    }
    for(i=0;i<=next&&i<=count-1;i++)
        printf("%d",a[i]);
}
搜索更多相关主题的帖子: 十进制 二进制 
2009-09-14 19:35
peanut_acer
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2009-8-12
收藏
得分:0 
添加的一些 //注释  是为了 方便调试.... 呵呵
2009-09-14 19:38
peanut_acer
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2009-8-12
收藏
得分:0 
发现个错误... 修改了下..


#include <stdio.h>
#include <string.h>
 
void outint(int);
void outfloat(float ,int );
 
 
int main()
{
    float num;  //需要转换的数
    int i,count; //i为用来存放num的整数部分  count是输出结果保留的小数位数
    float f;//f用来存放num的小数部分
    printf("Please enter a decimal count:");
    scanf("%f",&num);
    if(num>10240.0||num<-10240)  //懒得解决溢出问题 就加个限制
    {
        printf(" You must use a high-level calculator,I can't help you!!!!\n");
        exit(1);
    }
    i=num;
    f=num-i;
    printf("How many decimal do you want to retain:");
    scanf("%d",&count);
    printf("The count entered by you has been changed,look!!!-->   ");
    outint(i);
    outfloat(f,count);
    printf("B\n");
     
 
}
 
 
void outint(int i)
{
    int a[32],m=0,n=0,mod;
    int next=0;
    if(i==0)
    {
        printf("0");
        exit(0);
    }
     
    if(i>=0)
    {
        while(i/2>=1)
        {
            a[next]=i%2;
            ++next;
            i/=2;
        }
        a[next]=1;
        next++;
        a[next]=0;
    }
    else
    {     
        i*=-1;
        while(i/2>=1)
        {
            a[next]=i%2;
            ++next;
            i/=2;
        }
        a[next]=1;
        next++;
        a[next]=1;
    }         
     
    for(m=0;m<=next-m;m++)
    {
        mod=a[m];
        a[m]=a[next-m];
        a[next-m]=mod;
    }
    for(m=0;m<=next;m++)
        printf("%d",a[m]);
}
 
 
 
void outfloat(float f,int count)
{
    int a[32],next=0,i;
    printf(".");
     
    if(f==0.0)
    {
        printf("0");
        goto out;
    }
    if(f<0)
        f*=-1;
    while(f*2.0!=1.0)
    {
        if(f*2.0>1.0)
        {
            a[next]=1;
            next++;
            f=f*2.0-1.0;
        }
        else
        {
            a[next]=0;
            next++;
            f=f*2.0;
        }
    }
     
 
    for(i=0;i<next&&i<=count-1;i++)
        printf("%d",a[i]);
out:
    ;
}
2009-09-14 20:07
peanut_acer
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2009-8-12
收藏
得分:0 
只是写的玩玩 我知道有函数可以转换...  请各位放上自己写的源码...  
放上源码大家才能一起研究...  
小白嘴下留情
2009-09-17 18:26
peanut_acer
Rank: 1
等 级:新手上路
帖 子:16
专家分:7
注 册:2009-8-12
收藏
得分:0 
整数的没有挑战性 要带小数的才带劲 哈哈....
两位的程序收下了  哈哈..
2009-09-23 23:59
快速回复:十进制转二进制的程序...(限制溢出...呵呵..)
数据加载中...
 
   



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

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