用一个算法实现十进制数向二进制数转换,我们考虑得到7的二进制表示,奇数的二进制形式最后一位肯定是1,而偶数的二进制最后一位肯定是0。可以通过7%2来计算二进制最后一位数是0或者1。即对于十进制整数n而言,二进制表示的最后一位肯定可以用n%2计算出来。而为了得到二进制倒数第二位上的数字,则需要把十进制数除以2,这种对于十进制数的计算相当于把该数值的二进制位向左移了一位(可以类比计算一个十进制数的十位上数字,只需要把该数值除以十,此时得到的结果数值的个位即原数值的十位数值)。如果此时得到的结果是奇数,则说明二进制数倒数第二位对应1,否则为0。此时需要考虑,何时结束运算,只要被2除的结果等于或者大于2,那就还需要一位二进制位进行表示。因此,只有被2除的结果小于2时,才停止计算。所以,可以考虑循环和递归的方法实现该算法。
C语言实现方法一:
#include<stdio.h>
#define MAX 32
int main(void)
{
int i=0,n,a[MAX];
printf("请输入一个十进制整数:\n");
scanf("%d",&n);
while (n>0) //循环过程的始终,判断n是否能被2除尽
{
a[i] = n%2; //用数组存储每次除以2之后的余数,即断定奇偶性,对应二进制位上数值
i = i+1;
n = n/2;
}
printf("十进制整数转换为二进制数是:\n");
for(; i > 0; i--)
printf("%d",a[i-1]);
printf("\n");
return 0;
}
C语言实现方法二:
#include <stdio.h>
#define MAX 32
int main(void)
{
int a,r,i=0,j=1,count[MAX]; //输入的是a
printf("请输入一个十进制整数:\n");
scanf("%d",&a);
do{ //循环,直到a等于0跳出
r = a%2; //求每一次的余数,即二进制位上的数值
a = a/2;
i++;
count[i] = r;
}
while(a != 0); //每次除以2之后,二进制位左移一位,判断是否结束循环
printf("十进制整数转换为二进制数是:\n");
for(j = i; j > 0; j--) //倒序输出二进制位上数值
printf("%d",count[j]);
printf("\n");
return 0;
}
C语言实现方法三:
#include<stdio.h>
void binary_cal(int n){
int r;
r = n % 2;
if(n >= 2)
binary_cal(n/2); //使用递归函数实现,占用较多内存,执行速度较慢
printf("%d",r);
}
int main(void){
int num;
printf("请输入一个十进制整数:\n");
while(scanf("%d",&num) == 1){
printf("十进制整数转换为二进制数是:\n");
binary_cal(num);
putchar('\n');
}
return 0;
}
C++实现代码:
#include"stdafx.h"
#include <iostream>
#define MAX 32
using namespace std;
int main(){
cout << "请输入一个整型十进制数:" << endl;
int num,i= 0;
cin >> num;
cout << "十进制整数转换为二进制数是:" <<endl;
int bin[MAX],length = 0;
do
{
bin[i] = num % 2;
num = num / 2;
i++;
length++;
} while (num != 1);
bin[length] = num;
length++;
for (i = length - 1; i >= 0; i--)
cout << bin[i];
cout << endl;
return 0;
}