一、十六进制转八进制
问题描述
给定n个十六进制正整数,输出它们对应的八进制数。
输入格式
输入的第一行为一个正整数n (1<=n<=10)。
接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制
数长度不超过100000。
输出格式
输出n行,每行为输入对应的八进制正整数。
【注意】
输入的十六进制数不会有前导0,比如012A。
输出的八进制数也不能有前导0。
样例输入
2
39
123ABC
样例输出
71
4435274
【提示】
先将十六进制数转换成某进制数,再由某进制数转换成八进制。
代码:
#include <stdio.h>
#include <string.h>
int b[1000005];
char s[1000005];
int main()
{
int n;
int i;
int k;
int j;
int temp;
int len;
char c;
scanf("%d",&n);
while(n--)
{
scanf("%s",&s);
len = strlen(s);
for(i = 0; i < len; i++)
{
c = s[i];
if(c >= '0' && c <= '9')
{
temp = c - '0';
}
else
{
temp = c - 55;
}
j = 3;
k = 4 * i;
while(j > -1)
{
b[k+j] = temp % 2;
j--;
temp = temp / 2;
}
}
len = len * 4 -1;
j = 0;
while(len >= 2)
{
temp = b[len] + (b[len-1]) * 2 + b[len-2] * 4;
s[j] = (char)(temp+'0');
len = len -3;
j++;
}
i = 0;
temp = 0;
while(i <= len)
{
temp = temp*2+b[i];
i++;
}
if(temp != 0)
{
s[j] = (char)(temp + '0');
}
else
{
j--;
}
for(j;j>= 0;j--)
{
printf("%c",s[j]);
}
printf("\n");
}
return 0;
}
二、十六进制转十进制
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:
十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
char s[100];
char c;
int i;
int temp;
int len;
long long r = 0;
scanf("%s",s);
len = strlen(s);
for(i = 0; i < len; i++)
{
c = s[i];
if(c >= '0' && c <= '9')
{
temp = c - '0';
}
else
{
temp = c - 55;
}
r += temp * pow(16*1.0,len-1-i);
}
printf("%lld",r);
return 0;
}
三、十进制转十六进制
问题描述
十六进制数是在程序设计时经常要使用到的一种整数的表示方式。
它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。
十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中是11,
以此类推,十进制的30在十六进制中是1E。
给出一个非负整数,将它表示成十六进制的形式。
输入格式
输入包含一个非负整数a,表示要转换的数。0<=a<=2147483647
输出格式
输出这个整数的16进制表示 样例输入 30 样例输出 1E
代码:
#include <stdio.h>
#include <string.h>
int main()
{
int n;
int i = 0;
int len;
int temp;
char s[100];
scanf("%d",&n);
while(n)
{
temp = n % 16;
if(temp >= 0 && temp <= 9)
{
s[i] = temp + '0';
}
else
{
s[i] = temp + 'A' - 10;
}
i++;
n = n / 16;
}
s[i] = '\0';
if(s[0] == '\0')
{
printf("0");
}
else
{
len = strlen(s);
for(len ;len >= 0;len--)
{
printf("%c",s[len]);
}
}
printf("\n");
return 0;
}