十进制转二进制

时间:2021-09-09 20:56:52
问题描述
将一个十进制正整数转为二进制形式输出。

输入说明
一个十进制正整数。

输出说明
转化后的二进制形式。

输入样例
6

输出样例
110

源地址:http://58.193.10.238/oj/problem.php?id=1055
要求 定义一个二进制转换的函数,使用递归方法

13 个解决方案

#1


#include <stdio.h>
#include <stdlib.h>

int main()
{
    int decimal;//存储十进制数
    int n=1;//记录二进制位数
    int t=2;//
    int base=2;//二进制的基,即2
    int *binary;//存储转化后的二进制数组
    int j=0;//循环变量
    int temp;
    printf("请输入一个十进制数:");
    scanf("%d",&decimal);//read the input number
    while(decimal/t!=0)
    {
        n++;
        t=t*base;
    }
    printf("该十进制数可以被%d位二进制表示.\n",n);

    binary=(int *)malloc(sizeof(int)*n);
    j=0;
    temp=decimal;
    for(j=n-1;j>=0;j--)
    {
        binary[j]=temp%2;
        temp=temp/2;
    }
    printf("%d对应的二进制位数为:",decimal);
    for(j=0;j<n;j++)
    {
        printf("%d",binary[j]);
        if(j%4==0) printf("\t");//每四位输出一个Tab
    }
    return 0;
}

#2


抱歉,看错题目了,这个
//十进制与二进制数的转化
//作者:nuaazdh
//时间:2011年11月30日

#include <stdio.h>

void Scale(int d,int base);

int main()
{
    int decimal;//存储十进制数
    int n=1;//记录二进制位数
    int t=2;//
    int base=2;//二进制的基,即2
    int *binary;//存储转化后的二进制数组
    int j=0;//循环变量
    int temp;
    printf("请输入一个十进制数:");
    scanf("%d",&decimal);//read the input number
    while(decimal/t!=0)
    {
        n++;
        t=t*base;
    }
    printf("该十进制数可以被%d位二进制表示.\n",n);

    binary=(int *)malloc(sizeof(int)*n);
    j=0;
    temp=decimal;
    for(j=n-1;j>=0;j--)
    {
        binary[j]=temp%2;
        temp=temp/2;
    }
    printf("%d对应的二进制位数为:",decimal);
    for(j=0;j<n;j++)
    {
        printf("%d",binary[j]);
        if((j+1)%4==0) printf(" ");//每四位输出一个空格
    }
    //递归实现
    printf("\n递归实现结果:");
    Scale(decimal,2);
    return 0;
}

//递归实现数制转换
void Scale(int d,int base)
{
    if(d/base!=0)
    {
        Scale(d/base,base);
        printf("%d",d%base);
    }
    else
    {
        printf("%d",d%base);
    }


}

#3


十进制转换成任意进制:

#include <iostream>
using namespace std;
void swap(a,b)
{
for(;a>=b;)
{

c[i]=a%b;
a=(a-c[i])/b;

i++;
if (a<b)
c[i]=a%b;


}
cout<<"转换后的"<<b<<"进制数为:"<<endl;
for(int m=i;m>=0;m--)
{cout<<c[m];}
cout<<endl;
}

int main()
{
long a;int b;
int c[100];
int i=0;
cout<<"请输入要转换的数据:"<<endl;
cin>>a;
cout<<"请输入要转换成的进制:"<<endl;
cin>>b;
swap(a,b);

return 0;

}

#4


能转换为16进制吗?甚至20进制吗。。

引用 3 楼 zfn23 的回复:
十进制转换成任意进制:

C/C++ code


#include <iostream>
using namespace std;
void swap(a,b)
{
    for(;a>=b;)
    {
        
        c[i]=a%b;
        a=(a-c[i])/b;
        
        i++;
       ……

#5


嗯,常用的就递归,简单

引用 2 楼 nuaazdh 的回复:
抱歉,看错题目了,这个

C/C++ code

//十进制与二进制数的转化
//作者:nuaazdh
//时间:2011年11月30日

#include <stdio.h>

void Scale(int d,int base);

int main()
{
    int decimal;//存储十进制数
    int n=1;//记录二进制位数
    i……

#6


#include <stdio.h>

void Convert(int n)
{
if (n!=0)
{

Convert(n/2);
printf("%d",n%2);
}
}

int main()
{
int n;
while (scanf("%d",&n))
{
Convert(n);
}
return 0;
}

#7


位运算
#include<stdio.h>
int main()
{
int a,i;
i=sizeof(int)*8;
for(scanf("%d",&a);i>0;i--,printf("%d",a>>i&1));
system("pause");
}

#8


引用 7 楼 lostinginto 的回复:
位运算
#include<stdio.h>
int main()
{
int a,i;
i=sizeof(int)*8;
for(scanf("%d",&amp;a);i>0;i--,printf("%d",a>>i&amp;1));
system("pause");
}
LZ要递归

#9


欢迎来到常州信息学院OnlineJudge系统
有点亲切感。

#10


楼主嵌入式111的?

#11


#2楼少了一个
#include <stdlib.h>
如果你觉的以上复杂的话,我有一个简单的:
#include <stdio.h>
#define maxsize 100
void main()
{   
int decimal,n=0,i=0,elem[maxsize];
    printf("请输入一个十进制数:");
scanf("%d",&decimal);
while(decimal!=0)
{
elem[n]=decimal%2;
n++;
decimal=decimal/2;
}
for(i=n-1;i>=0;i--)
printf("%d ",elem[i]);

}

#12


#include <stdio.h>
#include "cs50.h"

// 要转换的进制系统 SYS, 读者可以任意该,不能超过36;
#define SYS 16

void SysConver(int);

int main(void)
{
if (SYS > 36)
{
printf("the System make no sense!!!!!");
return 1;
}


int d; 

// enter the  decimal number you want to convert
printf("enter a num to convert: ");
d = GetInt();

// convert to binary
SysConver(d);
printf("\n");
getchar();

return 0;
}

void SysConver(int x)
{
if (x >= SYS)
SysConver(x / SYS);

int Base =  x % SYS;

        // > 9部分用字母表示.
if (Base > 9)
{
Base += 'a' - 10;  
printf("%c", (char)Base);
}
else
printf("%d", Base);
}



#13


#include<stdio.h>
int transformToBin(int dnum,int bin[]);
main()
{
int dnum;//定义一个变量输入一个十进制数
int bin[100];//定义一个数组,用于存放转换后的二进制
int n,i;
printf("请输入一个十进制数:");
scanf("%d",&dnum);

    n = transformToBin(dnum,bin);

for(i=n-1;i>=0;i--)//倒序输出数组得到正确的二进制数
{
printf("%d",bin[i]);
}
printf("\n");



}                                    
int transformToBin(int dnum,int bin[])
{
int i;
int len = 0;//用于记录数组长度
for(i=0 ;i<100 ;i++ )
{
if(dnum == 0)
break;
bin[i] = dnum%2;
dnum = dnum/2;//整型除整型还是整型
len++;
}

return len;

}

#1


#include <stdio.h>
#include <stdlib.h>

int main()
{
    int decimal;//存储十进制数
    int n=1;//记录二进制位数
    int t=2;//
    int base=2;//二进制的基,即2
    int *binary;//存储转化后的二进制数组
    int j=0;//循环变量
    int temp;
    printf("请输入一个十进制数:");
    scanf("%d",&decimal);//read the input number
    while(decimal/t!=0)
    {
        n++;
        t=t*base;
    }
    printf("该十进制数可以被%d位二进制表示.\n",n);

    binary=(int *)malloc(sizeof(int)*n);
    j=0;
    temp=decimal;
    for(j=n-1;j>=0;j--)
    {
        binary[j]=temp%2;
        temp=temp/2;
    }
    printf("%d对应的二进制位数为:",decimal);
    for(j=0;j<n;j++)
    {
        printf("%d",binary[j]);
        if(j%4==0) printf("\t");//每四位输出一个Tab
    }
    return 0;
}

#2


抱歉,看错题目了,这个
//十进制与二进制数的转化
//作者:nuaazdh
//时间:2011年11月30日

#include <stdio.h>

void Scale(int d,int base);

int main()
{
    int decimal;//存储十进制数
    int n=1;//记录二进制位数
    int t=2;//
    int base=2;//二进制的基,即2
    int *binary;//存储转化后的二进制数组
    int j=0;//循环变量
    int temp;
    printf("请输入一个十进制数:");
    scanf("%d",&decimal);//read the input number
    while(decimal/t!=0)
    {
        n++;
        t=t*base;
    }
    printf("该十进制数可以被%d位二进制表示.\n",n);

    binary=(int *)malloc(sizeof(int)*n);
    j=0;
    temp=decimal;
    for(j=n-1;j>=0;j--)
    {
        binary[j]=temp%2;
        temp=temp/2;
    }
    printf("%d对应的二进制位数为:",decimal);
    for(j=0;j<n;j++)
    {
        printf("%d",binary[j]);
        if((j+1)%4==0) printf(" ");//每四位输出一个空格
    }
    //递归实现
    printf("\n递归实现结果:");
    Scale(decimal,2);
    return 0;
}

//递归实现数制转换
void Scale(int d,int base)
{
    if(d/base!=0)
    {
        Scale(d/base,base);
        printf("%d",d%base);
    }
    else
    {
        printf("%d",d%base);
    }


}

#3


十进制转换成任意进制:

#include <iostream>
using namespace std;
void swap(a,b)
{
for(;a>=b;)
{

c[i]=a%b;
a=(a-c[i])/b;

i++;
if (a<b)
c[i]=a%b;


}
cout<<"转换后的"<<b<<"进制数为:"<<endl;
for(int m=i;m>=0;m--)
{cout<<c[m];}
cout<<endl;
}

int main()
{
long a;int b;
int c[100];
int i=0;
cout<<"请输入要转换的数据:"<<endl;
cin>>a;
cout<<"请输入要转换成的进制:"<<endl;
cin>>b;
swap(a,b);

return 0;

}

#4


能转换为16进制吗?甚至20进制吗。。

引用 3 楼 zfn23 的回复:
十进制转换成任意进制:

C/C++ code


#include <iostream>
using namespace std;
void swap(a,b)
{
    for(;a>=b;)
    {
        
        c[i]=a%b;
        a=(a-c[i])/b;
        
        i++;
       ……

#5


嗯,常用的就递归,简单

引用 2 楼 nuaazdh 的回复:
抱歉,看错题目了,这个

C/C++ code

//十进制与二进制数的转化
//作者:nuaazdh
//时间:2011年11月30日

#include <stdio.h>

void Scale(int d,int base);

int main()
{
    int decimal;//存储十进制数
    int n=1;//记录二进制位数
    i……

#6


#include <stdio.h>

void Convert(int n)
{
if (n!=0)
{

Convert(n/2);
printf("%d",n%2);
}
}

int main()
{
int n;
while (scanf("%d",&n))
{
Convert(n);
}
return 0;
}

#7


位运算
#include<stdio.h>
int main()
{
int a,i;
i=sizeof(int)*8;
for(scanf("%d",&a);i>0;i--,printf("%d",a>>i&1));
system("pause");
}

#8


引用 7 楼 lostinginto 的回复:
位运算
#include<stdio.h>
int main()
{
int a,i;
i=sizeof(int)*8;
for(scanf("%d",&amp;a);i>0;i--,printf("%d",a>>i&amp;1));
system("pause");
}
LZ要递归

#9


欢迎来到常州信息学院OnlineJudge系统
有点亲切感。

#10


楼主嵌入式111的?

#11


#2楼少了一个
#include <stdlib.h>
如果你觉的以上复杂的话,我有一个简单的:
#include <stdio.h>
#define maxsize 100
void main()
{   
int decimal,n=0,i=0,elem[maxsize];
    printf("请输入一个十进制数:");
scanf("%d",&decimal);
while(decimal!=0)
{
elem[n]=decimal%2;
n++;
decimal=decimal/2;
}
for(i=n-1;i>=0;i--)
printf("%d ",elem[i]);

}

#12


#include <stdio.h>
#include "cs50.h"

// 要转换的进制系统 SYS, 读者可以任意该,不能超过36;
#define SYS 16

void SysConver(int);

int main(void)
{
if (SYS > 36)
{
printf("the System make no sense!!!!!");
return 1;
}


int d; 

// enter the  decimal number you want to convert
printf("enter a num to convert: ");
d = GetInt();

// convert to binary
SysConver(d);
printf("\n");
getchar();

return 0;
}

void SysConver(int x)
{
if (x >= SYS)
SysConver(x / SYS);

int Base =  x % SYS;

        // > 9部分用字母表示.
if (Base > 9)
{
Base += 'a' - 10;  
printf("%c", (char)Base);
}
else
printf("%d", Base);
}



#13


#include<stdio.h>
int transformToBin(int dnum,int bin[]);
main()
{
int dnum;//定义一个变量输入一个十进制数
int bin[100];//定义一个数组,用于存放转换后的二进制
int n,i;
printf("请输入一个十进制数:");
scanf("%d",&dnum);

    n = transformToBin(dnum,bin);

for(i=n-1;i>=0;i--)//倒序输出数组得到正确的二进制数
{
printf("%d",bin[i]);
}
printf("\n");



}                                    
int transformToBin(int dnum,int bin[])
{
int i;
int len = 0;//用于记录数组长度
for(i=0 ;i<100 ;i++ )
{
if(dnum == 0)
break;
bin[i] = dnum%2;
dnum = dnum/2;//整型除整型还是整型
len++;
}

return len;

}