蓝桥杯基础练习——十六进制转换对应八进制

 
  注意:先将十六进制数转换成某进制

#include <stdio.h>
#include <malloc.h>
#include <string.h>
struct Shiliu{
	char s[1000001] ;
};
typedef struct Shiliu shiliu ;

struct Ba{
	char s[1000001] ;
};
typedef struct Ba ba ;

struct Er{
	char s[4000001] ;
};
typedef struct Er er ;

int main()
{
	int n ;
	scanf("%d",&n) ;
	shiliu* a = (shiliu*)malloc(n*sizeof(shiliu)) ;
	ba* c = (ba*)malloc(sizeof(ba)) ;
	er* b = (er*)malloc(sizeof(er)) ;
	for(int i=0;i<n;++i)
		scanf("%s",a[i].s) ;
		
	int number = 0 ;
	for(int i=0;i<n;++i)
	{ 
		number = 0 ;
		for(int j=0;a[i].s[j]!='\0';++j)
		{
			switch(a[i].s[j])
			{
				case '0':
					b->s[number++]='0';b->s[number++]='0';b->s[number++]='0';b->s[number++]='0';
					break ;
				case '1':
					b->s[number++]='0';b->s[number++]='0';b->s[number++]='0';b->s[number++]='1';
					break ;
				case '2':
					b->s[number++]='0';b->s[number++]='0';b->s[number++]='1';b->s[number++]='0';
					break ;
				case '3':
					b->s[number++]='0';b->s[number++]='0';b->s[number++]='1';b->s[number++]='1';
					break ;
				case '4':
					b->s[number++]='0';b->s[number++]='1';b->s[number++]='0';b->s[number++]='0';
					break ;
				case '5':
					b->s[number++]='0';b->s[number++]='1';b->s[number++]='0';b->s[number++]='1';
					break ;
				case '6':
					b->s[number++]='0';b->s[number++]='1';b->s[number++]='1';b->s[number++]='0';
					break ;
				case '7':
					b->s[number++]='0';b->s[number++]='1';b->s[number++]='1';b->s[number++]='1';
					break ;
				case '8':
					b->s[number++]='1';b->s[number++]='0';b->s[number++]='0';b->s[number++]='0';
					break ;
				case '9':
					b->s[number++]='1';b->s[number++]='0';b->s[number++]='0';b->s[number++]='1';
					break ;
				case 'A':
					b->s[number++]='1';b->s[number++]='0';b->s[number++]='1';b->s[number++]='0';
					break ;
				case 'B':
					b->s[number++]='1';b->s[number++]='0';b->s[number++]='1';b->s[number++]='1';
					break ;
				case 'C':
					b->s[number++]='1';b->s[number++]='1';b->s[number++]='0';b->s[number++]='0';
					break ;
				case 'D':
					b->s[number++]='1';b->s[number++]='1';b->s[number++]='0';b->s[number++]='1';
					break ;
				case 'E':
					b->s[number++]='1';b->s[number++]='1';b->s[number++]='1';b->s[number++]='0';
					break ;
				case 'F':
					b->s[number++]='1';b->s[number++]='1';b->s[number++]='1';b->s[number++]='1';
					break ;	
			}
			b->s[number]='\0' ;
		}

		number = 0 ;
		int sum = strlen(b->s) ;
		int j ;
		if(sum%3==0)
			j = 0 ;
		else if(sum%3==1)
			j = -2 ;
		else 
			j = -1 ;
		while(j<sum) 
		{
			char temp[4] ;
			if(j==-2)
			{
				temp[0]='0';temp[1]='0'; j=0; temp[2]=b->s[j++] ; temp[3]='\0' ;
			}
			else if(j==-1)
			{
				temp[0]='0'; j=0; temp[1]=b->s[j++]; temp[2]=b->s[j++] ; temp[3]='\0' ;
			}
			else
			{
				temp[0]=b->s[j++];temp[1]=b->s[j++];temp[2]=b->s[j++];temp[3]='\0';
			}
			if(strcmp(temp,"000")==0)
				c->s[number++]='0';
			else if(strcmp(temp,"001")==0)
				c->s[number++]='1';
			else if(strcmp(temp,"010")==0)
				c->s[number++]='2';
			else if(strcmp(temp,"011")==0)
				c->s[number++]='3';
			else if(strcmp(temp,"100")==0)
				c->s[number++]='4';
			else if(strcmp(temp,"101")==0)
				c->s[number++]='5';
			else if(strcmp(temp,"110")==0)
				c->s[number++]='6';
			else if(strcmp(temp,"111")==0)
				c->s[number++]='7';
			c->s[number]='\0' ;
		}
		int sign = 0 ;
		for(int k=0;;++k)
		{
			if(c->s[k]!='0')
			{
				sign = k ; break ;
			}
		}
		for(int k=sign;c->s[k]!=';
		printf("\n") ;
		b->s[0]='\0' ; c->s[0]='\0' ;
	}	
	free(c) ; free(b)\0';++k)
			printf("%c",c->s[k])  ;
	return 0 ;
}

数,再由某进制数转换成八进制。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值