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

这里写图片描述