##十万位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;
}
四、运行结果