题目
程序提示用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出。
输入
输入只有一行,即三个字符。
输出
三个整数,中间用空格隔开。
样例输入
FFF
样例输出
FFF 4095 7777
易错点
如果输入的三位是0开头,16进制的 ‘0’ 不需要输出。
代码
#include<stdio.h>
#include<string.h>
#include<math.h>
int to10(char a[]){
int len = strlen(a);
int i;
int sum = 0;
for (i=0;i<len;i++)
{
if (a[i]>='A')
sum+=(a[i]-55)*pow(16,len-i-1);
else
sum+=(a[i]-48)*pow(16,len-i-1);
}
return sum;
}
int to8(int a){
int i,num=0,sum=0;
int b[20];
while (a!=0){
b[num++] = a%8;
a/=8;
}
b[num++] = a;
for (i=num-1;i>=0;i--)
sum+=b[i]*pow(10,i);
return sum;
}
int main()
{
char temp[4];
scanf("%s",temp);
int a = to10(temp);
int i,b = to8(a);
int has_printed = 0;
for (i=0;i<3;i++)
{
if (has_printed!=0 || temp[i]!='0')
{
printf("%c",temp[i]);
has_printed = 1;
}
}
if (has_printed!=1)
printf("0");
printf(" %d %d",a,b);
return 0;
}