急求!! 进制转换2 8 16 转换为10进制的程序源代码

如题所述

第1个回答  2019-12-22
//---------------------------------------------------------------------------
#include
<stdio.h>
#include
<string.h>
char
*read(char
*num,const
unsigned
int
base)
//读取一个base进制的无符号整数
{
fflush(stdin);
switch
(base)
{
default:
fprintf(stderr,"ERROR,NEED
2,8,10
OR
16
BUT
THERE
IS
%u\n",base);
num=NULL;
break;
case
2:
scanf("%[10]",num);
break;
case
8:
scanf("%[0-7]",num);
break;
case
10:
scanf("%[0-9]",num);
break;
case
16:
scanf("%[0-9a-zA-Z]",num);
break;
}
return
num;
}
unsigned
long
int
binToDec(char
*num)
//将二进制整数转换为对应的十进制数字
{
unsigned
int
i;
unsigned
long
int
dec=0;
size_t
len=strlen(num);
for
(i
=
0;
i<len;
i++)
{
if
(num[i]-48)
{
dec|=1<<len-i-1;
}
}
return
dec;
}
unsigned
long
int
toDec(char
*num,const
unsigned
int
base)
//返回base进制的无符号整数num的十进制形式
{
unsigned
long
int
dec;
if
(num==NULL)
dec=-1;
else
switch
(base)
{
case
2:
dec=binToDec(num);
break;
case
8:
sscanf(num,"%o",&dec);
break;
case
10:
sscanf(num,"%ld",&dec);
break;
case
16:
sscanf(num,"%x",&dec);
break;
}
return
dec;
}
int
main(void)
{
char
num[sizeof(unsigned
long
int)*8+1];
unsigned
int
base;
printf("base:");
scanf("%u",&base);//输入原始进制
printf("number:");//输入原始正整数
printf("%lu",toDec(read(num,base),base));
//计算并输出对应的10进制整数
return
0;
}
//---------------------------------------------------------------------------
相似回答