c程序R进制与十进制之间的互换(2<=R<=16)

Python022

c程序R进制与十进制之间的互换(2<=R<=16),第1张

#include <stdio.h>

void main()

{

 int n,m,i,j,flag

 int s[100]

 long number

 char bin[16]="0123456789ABCDEF"

 char digit[100]

 printf("---本程序支持2到16进制任意转换---\n")

 printf("A:10  B:11  C:12  D:13  E:14  F:15\n")

 while(1)                //判断输入的数是不是2到16范围

 {

  printf("请选择你将要输入的数的进制(2到16):")

  scanf("%d",&n)

  if(n>=2&&n<=16)

   break

  else

   printf("输入错误……\n")

 }

 do                 //判断输入的数符不符合先前选择的进制,并把该数转换为10进制

 {

  number=0

  printf("请输入该数(数字范围0到%c):",bin[n-1])

  scanf("%s",digit)

  for(i=0digit[i]!='\0'i++)

  {

   flag=0

   for(j=0j<16j++)

   {

    if(digit[i]==bin[j])

    {

     flag=1

     break

    }

   }

   if(flag==1&&j<n)

    number=number*n+j

   else

   {

    printf(">>>输入的数不合法>>>\n")

    flag=0

    break

   }

  }

 }while(flag==0)

 printf("请输入要转换的进制:")

 scanf("%d",&m)

 printf("转换完成>>>\n  %2d进制数:%s\n=>%2d进制数:",n,digit,m)

 j=0

 while(number!=0)  //把10进制数number转换为 m 进制

 { 

  s[j]=number%m

  number=number/m

  j++

 }

 for(i=j-1i>=0i--)

  printf("%c",bin[s[i]])

 printf("\n")

}

除法,比如16换成二进制16/2的8余0。继续,8除2的4余0,继续,4除2的2余0,继续,2除2的1。然后把刚才的余数倒着写出来,最后的一个不算,1留着就是1000。其实应该用短除法公式写给你,不好编辑。若写的不够明白,加QQ974430914详细说