进制转换

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

void convertto2(int num);//函数声明
void convertto8(int num);
void convertto16(int num);
int convert2to10(char *s);
int convert8to10(char *s);
int convert16to10(char *s);

int main(int argc,char **argv)
{
	int		type;
	int		sum;
	int		num;
	char		s[50];
	char		choice='NULL';

again:
	printf("1 二进制\n");
	printf("2 八进制\n");
	printf("3 十进制\n");
	printf("4 十六进制\n");
	printf("请选择数的进制类型:\n");
	scanf(" %d",&type);

	switch(type)
	{
		case 1:
			printf("请输入数值:");
			scanf(" %s",s);
			sum=convert2to10(s);
			printf("->十进制:%d",sum);
			printf("\n->八进制:");
			convertto8(sum);
			printf("\n->十六进制:");
			convertto16(sum);
			break;
		case 2:
			printf("请输入数值:");
			scanf(" %s",s);
			sum=convert8to10(s);
			printf("->二进制:");
			convertto2(sum);
			printf("\n->十进制:%d",sum);
			printf("\n->十六进制:");
			convertto16(sum);
			break;
		case 3:
			printf("请输入数值:");
			scanf(" %d",&num);
			printf("->二进制:");
			convertto2(num);
			printf("\n->八进制:");
			convertto8(num);
			printf("\n->十六进制:");
			convertto16(num);
			break;
		case 4:
			printf("请输入数值:");
			scanf(" %s",s);
			sum=convert16to10(s);
			printf("->二进制:");
			convertto2(sum);
			printf("\n->八进制:");
			convertto8(sum);
			printf("\n->十进制:%d",sum);
	}

	printf("\n是否继续(y/n):");
	scanf(" %c",&choice);
	if(choice=='n')
	{return 0;}
	else
	{goto again;}

	return 0;
}


void convertto2(int num)//十进制转二进制
{
    if (num ==1|| num==0)
    {
        printf("%d",num);
    }
    else
    {
      int n=num / 2;
      convertto2(n);
      printf("%d",num %2);
    }
}


void convertto8(int num)//十进制转八进制
{
    if (num  < 8)
    {
        printf("%d", num);
    }
    else
    {
        int n = num / 8;
        convertto8(n);
        printf("%d", num % 8);
    }
}


void convertto16(int num)//十进制转十六进制
{
    if (num<16)
    {
        switch (num)
		{
		case 10:
			printf("%c", 'a');
			break;
		case 11:
			printf("%c", 'b'); 
			break;
		case 12:
			printf("%c", 'c'); 
			break;
		case 13:
			printf("%c", 'd'); 
			break;
		case 14:
			printf("%c", 'e'); 
			break;
		case 15:
			printf("%c", 'f'); 
			break;
		default:
			printf("%d", num); 
			break;
		}
    }
    else
    {
        int n = num / 16;
        convertto16(n);
		num = num % 16;
        switch (num)
		{
		case 10:
			printf("%c", 'a'); break;
		case 11:
			printf("%c", 'b'); break;
		case 12:
			printf("%c", 'c'); break;
		case 13:
			printf("%c", 'd'); break;
		case 14:
			printf("%c", 'e'); break;
		case 15:
			printf("%c", 'f'); break;
		default:
			printf("%d", num); break;
		}
    }

}

int convert2to10(char *s)//二进制转十进制
{
	int i,sum=0;
	int m=strlen(s);
	
	for(i=0;i<m;i++)
	{
		if(s[i]=='0')
		{
			sum=sum*2+0;
		}
		else if(s[i]=='1')
		{
			sum=sum*2+1;
		}
	}
	return sum;
}

int convert8to10(char *s)//八进制转十进制
{
	int i,t,sum=0;
	int m=strlen(s);
	for(i=0;i<m;i++)
	{
		t=s[i]-'0';
		sum=sum*8+t;
	}
		return sum;
}

int convert16to10(char *s)//十六进制转十进制
{
	int i,t;
	long sum =0;
	for(i=0;s[i];i++)
	{
		if(s[i]>='0'&&s[i]<='9')
		t=s[i]-'0';       
		if(s[i]>='a'&&s[i]<='z')
		t=s[i]-'a'+10;
		if(s[i]>='A'&&s[i]<='Z')
		t=s[i]-'A'+10;
		sum=sum*16+t;
	}
	return sum;	
 }
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值