欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C语言实现进制转换---二进制、八进制、十进制、十六进制。可直接运行

程序员文章站 2022-07-15 10:54:52
...

C语言实现简单的进制转换,没有使用什么算法

#include <stdio.h>
#include<string.h>


//将十六进制数转换为十进制数 
int Translate16To10(char s[])
{
	int p = 0,i;
	int  n = 1;
	int ans=0;
	for ( i = strlen(s) - 1; i >= 0; i--)
	{
		if (s[i] >= 'A'&&s[i] <= 'F')
			p = s[i] - 'A' + 10;
		else
			p = s[i] - '0';
		ans += p * n;
		n *= 16;
	}
	return ans;
}


//将十进制数转化为十六进制数 
int Translate10To16(int n,char s[])
{
	int i=0;
	int p;
	do
	{
		p=n%16;
		n/=16;
		if(p<=9)
		{
			s[i++]='0'+p; 
		}
		else
		s[i++]='A'+(p-10);
	}while(n!=0);

	return i;
}


//将十进制数转换为S进制数 
int Translate10ToX(int n,int a[],int jz)
{
	int i = 0;
	do
	{
		a[i++] = n % jz;
		n /= jz;
	} while (n != 0);

	return i;
}

//将X进制数转换为十进制 
int TranslateXto10(int n,int X)
{
	int mi=1;
	int sum=0,p=0;
	while(n!=0)
	{
		p=n%10;
		n/=10;
		sum+=p*mi;
		mi*=X;
	}
	
	return sum;
}

//十六进制转换其他进制
void SixteenToOthers(int jz)
{
	char str[20];
	int ans[100];
	int i;
	scanf("%s", str);
	int temp = Translate16To10(str);
	int len=Translate10ToX(temp, ans,jz);
	printf("转换结果为:\n");
	for ( i = len - 1; i >= 0; i--)
		printf("%d", ans[i]);
 } 
 
 //其他进制转换到十六进制
 void OthersToSixteen(int jz)
 {
 	int n,i;
	char ans[20];
	scanf("%d",&n);
	int temp=TranslateXto10(n,jz);
	int count=Translate10To16(temp,ans);
	printf("转换结果为:\n");
	for(i=count-1;i>=0;i--)
	{
		printf("%c",ans[i]);
	}
  } 
  
  //除了关于十六进制的普通转换
  void FormalTrans(int jza,int jzb)
  {
  	int n,i;
  	int a[20];
  	scanf("%d",&n);
  	int temp10jz=TranslateXto10(n,jza);
  	int count = Translate10ToX(temp10jz,a,jzb);
  	for(i=count-1;i>=0;i--)
  	{
  		printf("%d",a[i]);
	  }
   } 


int main()
{
	int jza, jzb;
	while(1) 
{
	printf("你想完成从几进制到几进制的转换?(例如十进制到八进制输入:10 8,支持二进制、八进制、十进制、十六进制之间的转换)\n");
	scanf("%d %d", &jza, &jzb);
	printf("请输入你想想转换的%d进制数:",jza);
	if (jza == 16)
	{
        SixteenToOthers(jzb);
	}
	
	if(jzb==16)
	{
        OthersToSixteen(jza);
	}
	
	else
	FormalTrans(jza,jzb);
}
	

	return 0;
}