
给你推荐一个程序你自己看就是了的,上面又详细的注释说明的,源程序如下(源程序使用的C语言,在VC++系统中也可以调试通过的):
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stdlib.h>
void main()
{
int j,k,m,n,x;
double r,p=0;
char a[20];
printf("请输入一个任意进制的数:");
gets(a);//在头文件<string.h>中定义
printf("请输入此数为何种进制的数:");
scanf("%d",&n);
m=strlen(a);//求字符串的长度
x=m;
for(k=0;k<m;k++)//主要是分段,以小数点为界限
{
if(a[k]=='.')
{
x=k;
break;
}
}
for(j=x-1;j>=0;j--)
{
if(a[j]=='-')//符号的处理
break;
if(a[j]=='A')
r=10;
else
if(a[j]=='B')
r=11;
else
if(a[j]=='C')
r=12;
else
if(a[j]=='D')
r=13;
else
if(a[j]=='E')
r=14;
else
if(a[j]=='F')
r=15;
else
if(a[j]>='G'&&a[j]<='Z'||a[j]>='a'&&a[j]<='z')
{
printf("ERROR!\n");
exit(0);//在头文件<stdlib.h>中定义,无条件跳出程序的的运行
}
else
r=a[j]-'0';//将字符转换成数字
if(r>=n)
{
printf("ERROR!\n");
exit(0);
}
p=p+r*pow((double)n,(double)(x-j-1));//计算结果
}
if(a[x]=='.')
{
for(j=x+1;j<m;j++)
{
if(a[j]=='A')
r=10;
else
if(a[j]=='B')
r=11;
else
if(a[j]=='C')
r=12;
else
if(a[j]=='D')
r=13;
else
if(a[j]=='E')
r=14;
else
if(a[j]=='F')
r=15;
else
if(a[j]>='G'&&a[j]<='Z'||a[j]>='a'&&a[j]<='z')
{
printf("ERROR!\n");
exit(0);
}
else
r=a[j]-'0';//将字符转换成数字
if(r>=n)
{
printf("ERROR!\n");
exit(0);
}
p=p+r*pow((double)n,(double)(x-j));
}
}
printf("转换结果为:");
if(a[0]=='-')
printf("-");
printf("%lf\n",p);
}
此程序可以计算任意进制(包括二进制到十六进制的转换,可以选用)。注意楼主你的1100101B是不对的二进制数的,二进制中只能包括0和1,去掉B后为1100101,据此计算出十进制数为101的。
根据程序运行即可知道运行结果如下图所示: