转换原则:低精度往高精度转换char short int long float double
两个char型运算时,自动转化为int型
原理:如果是0-9的数字则t=a[i]-'0',如果是字母则t=a[i]-'A'+10
如果输入的数据与进制不符,则应提示输入错误
从vs2015起gets()函数就没有了,dev可以使用。
因为可能造成缓冲区溢出,甚至程序崩溃。vs2019建议用gets_s()来代替
#include<stdio.h>
#include<string.h>
#include<stdlib.h> //exit()
int main()
{
long int t1;
char a[50];
int n, t;
gets(a); //输入一个数
strupr(a); //将a中的小写字母变为大写
scanf("%d", &n); //输入进制数
for (int i = 0; i < strlen(a); i++)
{
if (a[i] - '0' >= n && a[i] < 'A' || a[i] - 'A' + 10 >= n)
{
printf("data error!");
exit(-1);
}
if (a[i] >= '0' && a[i] <= '9') //10进制以下0-9
t = a[i] - '0';
else if (n >= 11 && (a[i] >= 'A' && a[i] <= 'A' + n - 10)) //大于10进制
t = a[i] - 'A' + 10;
t1 = t1 * n + t;
}
printf("%d\n", t1);
return 0;
}
测试结果