练习 十六进制转八进制

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

int main()
{
	int n, len, i;
	char a[100000];
	int b[100000];
	int sum;
	scanf("%d", &n);
	while(n--)
	{	
		scanf("%s", &a);
		len = strlen (a);
		sum = 0;
		for(i = 0; i <= len; i++)
		{
			if((a[i] >= 'A') && (a[i] <= 'F'))
				(int)sum +=( (a[i] - 'A' + 10) * pow(16, len - i - 1) );
			else if((a[i] <= '9') && (a[i] >= '0'))
				(int)sum +=  ((a[i] - '0') * pow(16, len - i - 1) );	
		}
		
		i = 0;
		while(sum != 0)
		{
			b[i] = sum%8;
			sum = sum/8;
	//	if(sum != 0)
			i++;
		}
		b[i] = sum;	
		if(b[i] != 0)
			printf("%d", b[i]);
		for(int j = i - 1; j >= 0; j++)
			printf("%d", b[j]);
		printf("\n");		
	}
	return 0;
}

-----------------------------------------

#include<stdio.h>
#include<string.h>
char ch[100010], ox[133340];
int main()
{
	int n, e[3] = {1, 16, 256};
	scanf("%d", &n);
	while(n--)
	{
		scanf("%s", ch);
		int len = strlen(ch);
		int len_ox = 133339, i;
		for(len--; len >= 0;)
		{	
			int adc = 0, sum = 0;
			for(i = 0; i < 3 &&  len >= 0; i++)
				sum += (ch[len] >= 'A') ? (ch[len--] - 'A' + 10) * e[i] : (ch[len--] - '0') * e[i];
			for(int j = len_ox ; j >= len_ox - i; j--, sum /= 8)
				ox[j] = (sum % 8) + '0';
			len_ox -= i + 1;
			
		}
		if(ox[++len_ox] == '0')
			printf("%s\n", ox+len_ox+1);
		else
			printf("%s\n", ox+len_ox);
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值