今天在图书馆借的书中找到的:
#include<stdio.h>//n进制转换为十进制
#include<string.h>
int main()
{
int i,n,t;
int t1=0;
int t2=0;
char a[100];
printf("Please enter a number that you want to convert :\n");
gets(a);//将n进制数存到数组中
printf("Please input n(2or8or16):\n");//输入进制数
scanf("%d",&n);
strupr(a);//将其中的大写字母换成小写
t=strlen(a);
for(i=0;i<t;i++)
{
if(a[i]-'0'>=n&&a[i]<'A'||a[i]-'A'+10>=n)//判断输入的数据和进制数是否相符
{
printf("error!\n"); //字符0表示48
break;
}
if(a[i]>='0'&&a[i]<='9')
t2=a[i]-'0';//为什么用这个?举个例子:比如要将字符‘1’转换成1,字符‘1’对应49,字符‘0’对应48,那么只要‘1’-‘0’就能得到十进制1了。
//而数字的ASCII码是按顺序排的,所以其他数字也可以这么做。
else if(n>=11&&(a[i]>='A'&&a[i]<='A'+n-10))
t2=a[i]-'a'+10;//将字符转换成对应的十六进制整数
t1=t1*n+t2;
}
printf("the decimal is %d\n",t1);
}
运行情况如下: