c十进制转二进制算法
㈠ c语言如何写十进制转二进制的程序
#include <stdio.h>
void trans(int x)
{
int a[30];
int i=0,rem;
do{
rem=x%2;x=x/2;
a[i]=rem;
i++;
}while(x!=0);
while(i>0)
printf("%d",a[--i]);
printf("\n");
}
void main()
{
int d;
printf("请输入一个十进制的正整数:\n");
do scanf("%d",&d);while(d<0);
trans(d);
}
㈡ 用c语言编程,实现十进制和二进制的相互转化。
#include<stdio.h>
int getnumber(char *s,int *n)
{ char *p=s;
int k,m;
*n=0; m=1;
while ( *p != ')' ) p++;
k=atoi(p+1); p--;
if ( k==2 || k==10 )
{ while ( *p!='(' ) { (*n)+=((*p)-'0')*m; m*=k; p--; }
return k;
}
else return 0;
}
void exchange(char *s,int n,int k)
{ char str[80],str1[80];
int e,m,i;
e=( k==2 )?(10):(2); m=0;
while ( n )
{ str[m]=n%e+'0'; n/=e; m++;
}
for ( i=0;i<m;i++ ) str1[i]=str[m-i-1];
str1[i]=0;
sprintf(s,"(%s)%d",str1,e);
}
void main()
{ char str[256],str1[256];
int n,k;
scanf("%s",str);
k=getnumber(str,&n);
if ( k )
{ exchange(str1,n,k);
printf("%s ==> %s
",str,str1);
}
}
㈢ 求一个C语言的十进制转二进制方法
void main()
{
int d, i;
scanf("%d", &e);
printf("%d的二进制表达式是:");
if(d<0)
{
printf("-"); // 打印符号
d=~d+1; // 求反加一 (得到的是正整数表达式)
}
for(i=30; i>0; i--)
{
printf("%d", (d>>i)&1); //保留最低位,最高位是符号位,经过上边的变化一定是0,做移位操作,获取2进制的相应比特位。&1 屏蔽掉其他位
}
printf("b\n");
}
㈣ c语言编程,将十进制整数转化为二进制
首先需要明确十进制转为二进制的算法:将所需转化的数除以2,所得余数为k1,将所得商再除以2,所得余数为k2…...重复步骤直到商为0;读数时从最后一个余数读起,即kn,k(n-1)…k2,k1;所得数便是转化成的二进制数(除二取余法)
㈤ C语言中怎样调用函数将十进制转换成二进制
1、打开visualC++6.0-文件-新建-文件-C++SourceFile。
㈥ c语言怎么将十进制转化成二进制
#include <stdio.h>
void main()
{
//进制转换函数的声明
int transfer(int x);
int x;
printf("请输入一个十进制数:");
scanf("%d",&x);
printf("转换成二进制数是:%d ",transfer(x));
}
int transfer(int x)
{
int p=1,y=0,yushu;
while(1)
{
yushu=x%2;
x/=2;
y+=yushu*p;
p*=10;
if(x<2)
{
y+=x*p;
break;
}
}
return y;
}
89÷2 ……1
44÷2 ……0
22÷2 ……0
11÷2 ……1
5÷2 ……1
2÷2 ……0
1
十进制小数转二进制数:“乘以2取整,顺序排列”(乘2取整法)
网络-二进制
㈦ 用C语言编程实现十进制转化为二进制
有两种计算方法,运行的结果是完全相同的:
一是采用位运算的方法:
#include
int main()
{ int n,i;
scanf("%d",&n);
for(i=31;i>=0;i--)
printf("%d",(n&(1<<i))!=0);
return 0;
}
二是采用楼主指定的方法:
#include
int a[32];
int main()
{ int n,i,k=0;
scanf("%d",&n);
if(n<0)k=1;
for(i=31;n;i--)
{a[i]=n%2;
n/=2;
}
if(k==1)
{for(i=31;i>=0;i--)
a[i]=1+a[i];
for(i=31;a[i];i--)
a[i]=0;
a[i]=1;
}
for(i=0;i<32;i++)
printf("%d",a[i]);
return 0;
}
㈧ C语言十进制转二进制
你的
for(x=1;n/2>=1;x++)
{
b=n%2;
a[x]=b;
n=(n-b)/2;
}
这里就错了,思路都错的,你下面保存了余数后,应该更新n的值啊,n应该是原来的缩小两倍啊!还有条件上不能用 n/2,应该是n>0 !如果按照你的,你用1或用其他数试一下,直接大脑里按照执行步骤走,就可以发现问题了。按照你的思路帮你改了一下代码,如下:
#include<stdio.h>
#include<string.h>
int main(void)
{
int n = 0, b = 0, i = 0, x = 0, a[30] = {0};
scanf("%d",&n);
printf("%11d",n);
printf("-->");
if(n < 0)
{
n = -n;
printf("n = -%d\n", n);
}
else
{
printf("n = %d\n", n);
}
for(x = 0; n > 0; x++) //这里是用来把十进制转化为二进制的核心
{
a[x] = n % 2;
n /= 2;
}
b = i = x - 1; //对二取证为0后表示已经转化结束,但方面执行了条件三,所以这里需要减1
for(x = 0; i > x; x++, i--) //把数组里的元素倒一下,才是第一位为二进制的最高位
{
a[x] ^= a[i];
a[i] ^= a[x];
a[x] ^= a[i];
}
for(i = 0; i <= b; i++)
{
printf("%d", a[i]);
}
printf("B\n");
return 0;
}
㈨ c语言十进制转二进制算法问题
#include
<stdio.h>
void
main()
{
int
b,i,c=0,a[30];
scanf("%d",&b);
while(b!=0)
{
i=b%2;
a[c]=i;
c++;
b=b/2;
}
for(;c>=1;c--)
{
printf("%d",a[c-1]);
}
printf("\n");
}
这回对了
!你原来的错误在
第一个for循环
c的值是数组的长度多一
因为判断到最后一次时
c又执行一次加一
第二个for循环里c的值又多减了一次
楼主请注意for循环的条件
一定要想清楚
你原来的结果
前面的数就是那个a[C+1]里的随机数
㈩ C语言 将十进制数转化为二进制数 程序代码
#include <stdio.h>
void main()
{
int a;
scanf(\"%d\",&a);//输入一个10进制数。
int result=0;//存储a的二进制结果。
int p=1;//p=1表示个位数
do
{
int b=a%2;//b是余数,第一个余数是二进制的个位。
result=result+p*b;
p=p*10;//*10表示下个是10位数。
a=a/2;
}while(a);
printf(\"\\n%d\\n\",result);
}
程序在vc6.0下编译通过可以直接用,你自己看看吧,思路是a%2的结果是二进制的个位数,(a/2)%2的结果是二进制的十位数所以p扩大10倍,以后依次类推。