P1143 进制转换
1.思路
核心思路:先把输入的转化为10进制数,然后再转化为所需要的进制
1.将该进制数转化为十进制数需要乘该进制数,再代码中则要逆序转换
2.题目中还有要注意的地方输入的为字符而不是数字时,需要转化数值的大小,用到的
函数isdigit(a) 判断输入的字符串是否为整数
if(isdigit(a[i]))//isdigit是判断是不是字符型 整型 数组的函数
b[i] = a[i] - '0';//转换成数
else//是字母
b[i] = (a[i] - 'A') + 10;//转换成数,记得 + 10
3.转换为十进制
int len1 = i;//i出来之后就是长度
for(i = len1 - 1; i >= 0; i -- ) {//倒着算出转换成十进制后是多少 长度为len1,但下标减一
sum += b[i] * time;//乘以每一位十进制的值是多少
time *= n;//不要忘记*n哦
}
4.转换为所需要的进制n,则需要除n取余法
int len2 = 0;//转换成m进制时用来表示下一位放在哪里的指针
while(sum >= 1) {//只要还没除完
c[len2] = sum % m;
sum /= m;
len2 ++ ;
}
2.源码
#include <stdio.h>
#include <ctype.h>
int main () {
int n, m, i, sum = 0, time = 1;//sum是用来存放转换成十进制后的数
char a[30];//输入的数组
int b[30];//存放每一位转换成数是多少的数组
int c[30];//转换成m进制后存放的数组
scanf("%d%s\n%d", &n, a, &m);
for(i = 0; a[i]; i ++ )//上面的链接解释了为什么要这样遍历数组
if(isdigit(a[i]))//isdigit是判断是不是字符型数组的函数
b[i] = a[i] - '0';//转换成数
else//是字母
b[i] = (a[i] - 'A') + 10;//转换成数,记得 + 10
int len1 = i;//i出来之后就是长度
for(i = len1 - 1; i >= 0; i -- ) {//倒着算出转换成十进制后是多少
sum += b[i] * time;//乘以每一位十进制的值是多少
time *= n;//不要忘记*n哦
}
int len2 = 0;//转换成m进制时用来表示下一位放在哪里的指针
while(sum >= 1) {//只要还没除完
c[len2] = sum % m;
sum /= m;
len2 ++ ;
}
for(int i = len2 - 1; i >= 0; i -- )//倒着输出
if(c[i] < 10) printf("%d", c[i]);//是数字
else printf("%c", c[i] - 10 + 'A');//是字母
return 0;
}