蓝桥杯 16进制转8进制

##十万位16进制转8进制
一、概述:

	在蓝桥杯的练习系统解决了一道题————16进制转八进制,
	乍一看感觉很简单,
	然而提交后显示错误好几遍后才知道它的测试数据里有一个十万位的16进制数,
											晕...*—*|||

二、主要思路:

根据3个十六进制为与4个八进制位一一对应的关系
将目标字符串每三个字符一组,转成十进制
再直接用c语言自带的输出八进制位一一输出
每个字符串处理完后记得换行

三、代码实现:

#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX_ARRNUM 10
#define MAX_XNUM 100001

void XToO(char* strX)
{
	int i, j, xtime;
	int len = strlen(strX);
	for(i = len%3 - 3; i < len; i+=3)
	{
		int sum = 0, count;
		for(count = 0; count < 3; count++)
		{
			if((*(strX + i + count) >='0') && (*(strX + i + count) <='9'))
				sum += (int)pow(16, 2 - count)*(*(strX+ i + count) -'0');
			else if((*(strX + i + count) >='A') && (*(strX + i + count) <='F'))
				sum += (int)pow(16, 2 - count)*(*(strX+ i + count) -'A' + 10);
		}
		if(i <= 0)
		{
			if(sum == 0) continue;
			printf("%o", sum); 
		}
		else
			printf("%04o", sum);
	}
	printf("\n");
	return;
}
int main()
{
	int num, i;
	char str[MAX_ARRNUM+1][MAX_XNUM];
	scanf("%d", &num);
	for(i = 1; i <= num; i++)
		scanf("%s", &str[i]);
	
	for(i = 1; i <= num; i++)
		XToO(str[i]);
	
	return 0;
}

四、运行结果
这里写图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值