更多"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; }