题目:进制转换
题号:B2143
难度:普及一
题目分析
这题与前一道题类似,直接编写函数将十进制形参转化为特定的进制
代码展示
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int Change_Zhi(int num,char a[100],int n)
{
int wei = 98;
a[99] = '\0';
while(num>0)
{
int yu;
yu = num % n;
if(yu<10)
a[wei--] = yu + '0';
else
a[wei--] = yu + 'A'-10;
num /= n;
}
return wei+1;
}
int main()
{
int m,n;
scanf("%d %d",&m,&n);
char a[100];
int x = Change_Zhi(m,a,n);
printf("%s",a+x);
}
代码解释
通过除基取余法,进行进制转换,
注意将十以内的余数转化为0-9字符,十之上的余数,转化为A-F的字符,
里面值得讲的是有个有意思的地方,既然通过除基取余法得到的字符串是反的,而你又不想再写函数将它反过来,那么何尝不尝试一下在刚开始储存字符的时候就反着存
a[wei--] = yu + '0';
else
a[wei--] = yu + 'A'-10;
注意的是刚开始在最末尾补上一个结束标志
int wei = 98;
a[99] = '\0';
然后将储存后的具体下标返回,这样后续通过下标便可将该字符串完美输出。
int x = Change_Zhi(m,a,n);
printf("%s",a+x);
总结
对于经常倒序输出的函数,并非一定要用多余的操作来将之逆序,
可以试着直接倒着储存,
记得返回具体的下标位置,和字符串结束符或者结束标志,转变角度有奇效。