| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖
标题:十进制转化二进制
只看楼主 加入收藏
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
 问题点数:0 回复次数:3 
十进制转化二进制

只能输入正数。十进制转化八、十六进制与十进制转化二进制一样道理。
#include<stdio.h>
#include<string.h>
#define M 20
void two(int sum1)
{
int i,a,b,j=0;
char c[M];
a=sum1;
while(sum1!=0)
{j++;sum1/=2;}
for(i=0;i<j;i++)
{
b=a%2;
a/=2;
c[j-i-1]=b+48;
}
c[i]='\0';
printf("%s.",c);
}

int qi(int j)
{
int i,m,n;
m=n=10;
for(i=0;i<j-1;i++)
m=m*n;
return m;

}
void two_xiaoshu(int sum2,int j)
{
int i,a,b,a1;
a=sum2;
a1=qi(j);
for(i=0;i<M;i++)
{
b=a*2;
if(b>=qi(j))
{printf("1");
a=b-a1;}
else
{printf("0");
a*=2;}
}
printf("\n");
}
void main()
{
char a[M];
int i=0,j=0,sum1=0,k=1,g;
int sum2=0;
printf("Input:");
gets(a);
for(;a[i]!='.' && a[i]!='\0';i++)
sum1=sum1*10+a[i]-'0';
g=i+1;
two(sum1);
i=strlen(a);
for(;g<i;g++)
{sum2=sum2*10+a[g]-'0';j++;}
two_xiaoshu(sum2,j);
}

搜索更多相关主题的帖子: 二进制 十进制 
2006-10-12 14:53
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
以下是引用C语言学习者在2006-10-12 14:53:40的发言:

只能输入正数。十进制转化八、十六进制与十进制转化二进制一样道理。
#include<stdio.h>
#include<string.h>
#define M 20
void two(int sum1)//对正数处理
{
int i,a,b,j=0;
char c[M];
a=sum1;
while(sum1!=0)
{j++;sum1/=2;}
for(i=0;i<j;i++)
{
b=a%2;
a/=2;
c[j-i-1]=b+48;
}
c[i]='\0';
printf("%s.",c);//输出正数
}

int qi(int j) //控制小数部分
{
int i,m,n;
m=n=10;
for(i=0;i<j-1;i++)
m=m*n;
return m;

}
void two_xiaoshu(int sum2,int j) //对小数处理
{
int i,a,b,a1;
a=sum2;
a1=qi(j);
for(i=0;i<M;i++)
{
b=a*2;
if(b>=qi(j))//输出小数部分
{printf("1");
a=b-a1;}
else
{printf("0");
a*=2;}
}
printf("\n");
}
void main()
{
char a[M];
int i=0,j=0,sum1=0,g, sum2=0;
printf("Input:");//输入部分
gets(a);

for(;a[i]!='.' && a[i]!='\0';i++)
sum1=sum1*10+a[i]-'0';
g=i+1;
two(sum1);//调用函数

i=strlen(a);调用库函数
for(;g<i;g++)
{sum2=sum2*10+a[g]-'0';j++;}
two_xiaoshu(sum2,j);//调用函数
}


谁有强殖装甲第二部,可以Q我460054868
2006-10-12 19:24
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

#include<stdio.h>

void DBint(int a[],int &len,int n)//处理整数部分
{
int i,j,temp;
while(n)
{
a[len]=n%2;
n/=2;
len++;
}
for(i=0,j=len-1;i<j;i++,j--)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
a[len++]=-1;/*设置小数点*/
}
void DBdecimal(int a[],int &len,double num)//处理小数部分
{
int flag=0;
while(num<1.0)
{
num*=2;
a[len]=(int)num;
num=num-a[len];
len++;
flag++;
if(flag>=10) /*社设置精度为10位*/
{
break;
}

}
}

int main()
{
double num;
int i=0,n,len=0,a[50];
scanf("%lf",&num);
n=(int)num;
DBint(a,len,n);
DBdecimal(a,len,num-n);
while(i<len)
{
if(a[i]==-1)
{
printf(".");
}
else
{
printf("%d",a[i]);
}
i++;
}
printf("\n");
return(0);
}


倚天照海花无数,流水高山心自知。
2006-10-12 22:51
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 

/*修改了一下*/
#include<stdio.h>

void DBint(int a[],int &len,int n) //处理整数部分
{
int i,j,temp;
while(n)
{
a[len]=n%2;
n/=2;
len++;
}
for(i=0,j=len-1;i<j;i++,j--)
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
a[len++]=-1;/*设置小数点*/
}
void DBdecimal(int a[],int &len,double num) //处理小数部分
{
int flag=0;
while(num>0&&num<1.0)
{
num*=2;
a[len]=(int)num;
num=num-a[len];
len++;
flag++;
if(flag>=10) /*社设置精度为10位*/
{
break;
}

}
}

int main()
{
double num;
int i=0,n,len=0,a[50];
scanf("%lf",&num);
n=(int)num;
DBint(a,len,n);
DBdecimal(a,len,num-n);
while(i<len)
{
if(a[i]==-1)
{
printf(".");
}
else
{
printf("%d",a[i]);
}
i++;
}
printf("\n");
return(0);
}


倚天照海花无数,流水高山心自知。
2006-10-13 12:21
快速回复:十进制转化二进制
数据加载中...
 
   



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

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