更多"C/C++、PostgreSQL、编译原理、计算机原理、TCP/IP、数据结构&算法、Linux编程”等技术文章请关注公众号: 君子黎
1.在二进制中,奇数的末尾一定是1,而偶数的末尾一定是0. 一般而言,对于数字n,其二进制的最后一位是n%2;这里值得注意的是,计算的第一位数字其实是待输出的二进制数的最后一位,(所以这里可以定义一个数组来存放二进制数0或1;当然也可以采用函数递归来实现);要获得下一位数字,必须把原数字除以2。如果计算结果是偶数,那么二进制的下一位数就是0;如果是奇数,就是1.
把上面的话翻译过来,如图:

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int ch[16]={0}; //存放二进制数0和1
int i,j;
int variable,index;
printf ("Please enter a value(0~32767):\n");
printf (" (Enter any letter to quit.)\n");
while (scanf ("%d",&variable) == 1)
//scanf()函数输入成功,返回读取的个数
{
for (index=0;index<15;index++)
{
i=variable%2; //取2的余数
j=variable/2; //取被2整除的数
variable=j; //将得到的商赋给变量variable,用来下次求%,获得下一个数
ch[index]=i; //将余数存放在数组中
}
for(index=15;index>=0;index--)/*这里下标不能从0~15,必须
{ *是15~0;因为我们计算出的第
printf ("%d",ch[index]); *一个数字是待输出二进制数的
if (index%4 == 0) *最后一位,而先被存入到了数
{ *组中
printf (" "); */
//每输出4个元素,输出一个空格
}
}
printf ("\n");
}
system ("pause");
return 0;
}
附:可以用递归来实现:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
void func_binary(unsigned long n); //函数声明
unsigned long number;
printf ("请输入十进制数字:\n");
while (scanf ("%d",&number) == 1)
{
printf ("二进制数为:\n");
func_binary (number);
putchar('\n');
printf ("请再次输入(任意字符结束):\n");
}
printf ("Good.\n");
system ("pause");
return 0;
}
void func_binary(unsigned long n) //定义函数
{
int r_value;
r_value=n%2;
if (n>=2)
{
func_binary (n/2);
}
putchar(r_value == 0?'0':'1');
return;
}
II.n进制转为十进制
实现功能:输入任意一个数字,同时说明是几进制,则将其转为十进制数。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LENGTH 100
int main(void)
{
long t1;
int i,n,t,t3;
char a[LENGTH];
printf ("请输入数字:\n");
gets(a); //输入n进制数存放到数字a中
strupr(a); //将a中的小写字母转为大写字母
t3=strlen (a); //求出数组a的长度
t1=0;
printf ("请输入进制数(2 or 8 or 16):\n");
scanf ("%d",&n); //输入的是几进制数
for (i=0;i<t3;i++)
{
if (a[i]-'0'>=n&&a[i]<'A'||a[i]-'A'+10>=n) //判断输入数与进制数是否相符合
{
printf ("输入错误.\n");
exit (0); //退出程序
}
if (a[i]>='0'&&a[i]<='9') //判断是否为数字
{
t=a[i]-'0';
}
else if (n>=11&&(a[i]>='A'&&a[i]<='A'+n-10)) //判断是否为字母
t=a[i]-'A'+10; //求出字母所代表的十进制数
t1=t1*n+t; //求出最终转换成的十进制数
}
printf ("十进制数是:%ld\n",t1); //打印结果
system ("pause");
return 0;
}



京公网安备 11010502036488号