帮帮忙呀,C语言高手~很急很急。在线等哦。

2024-12-27 21:38:09
推荐回答(2个)
回答1:

#include

// 转换为十进制数
unsigned p2dec(char *str,unsigned p1)
{
int i,len=strlen(str);
unsigned tmp,num=0;

for(i=len-1;i>=0;i--)
{
if(i==len-1) tmp=1;
else tmp*=p1;

/* 根据输入转换 */
if(str[i]>='0'&&str[i]<='9')
str[i]=str[i]-'0';
else if(str[i]>='a'&&str[i]<='z')
str[i]=str[i]-'a'+10;
else if(str[i]>='A'&&str[i]<='Z')
str[i]=str[i]-'A'+10;

num+=str[i]*tmp;
}

return num;
}

/* 进制转换 */
void tran(int num,unsigned p2)
{
int j;

/* 递归结束条件 */
if(num==0)return;
else
{
tran(num/p2,p2); /* 递归 */

if(num%p2>=10)
printf("%c",(num%p2-10+'A'));
else
printf("%d",num%p2);
}
}

int main(void)
{
char str[16];
unsigned p1,p2; /* 进制 */

/* 输入进制 */
printf("p1: ");
scanf("%u",&p1);
printf("p2: ");
scanf("%u",&p2);

getchar();
printf("input a number: ");
gets(str);

/* 进制转换 */
printf("result: ");
tran(p2dec(str,p1),p2);

getch();
return 0;
}

主要思想就是先把八进制转换为十进制,然后再转化为十六进制。。

回答2:

//---------------------------------------------------------------------------

#include
#include

int main(void)
{

int ot;

scanf("%O",&ot);
printf("%X",ot);
return 0;
}
//---------------------------------------------------------------------------