十万位16进制转8进制

106 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

十万位16进制转8进制

一、概述:

在蓝桥杯的练习系统解决了一道题————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;
}

四、运行结果

  • cpu 使用 15ms
  • 内存使用 1.871MB