先看一个最简单的十进制数转为二进制
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
int n, sn;
printf("请输入一个数n: ");
scanf("%d", &n);
char str[20] = "";
int i = 0;
while (n){
str[i] = r + '0';
n = n / 2;
++i;
}
for (i = i - 1; i >= 0; --i){
printf("%c", str[i]);
}
system("pause");
return 0;
}
这其实就实现了将一个十进制数转为二进制数字,思路也很简单,就是创建一个字符数组初始化为空用来保存进制转换的结果,每次将n%2的结果保存下来,再对变量n进行修改(即n = n / 2),同样的该方法适用用对于8进制的转换,但对于十六进制来说,我们需要用字符A-F来表示10 - 16,如果还用上面的方法去做,显然无法在结果中用A-F来表示数字,所以对代码进行简单修改,让其变成一个对十进制数任意进制转换的的程序
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(){
int n, sn;
printf("请输入一个数n和进制数sn: ");
scanf("%d %d", &n, &sn);
char str[20] = "";
int i = 0;
while (n){
int r = n % sn;
if (r < 10){
str[i] = r + '0';
}
else {
str[i] = r - 10 + 'A';
}
n = n / sn;
++i;
}
for (i = i - 1; i >= 0; --i){
printf("%c", str[i]);
}
system("pause");
return 0;
}
发生变化的地方主要是在保存n%sn的结果时,我们对其进行判断是否大于等于10,如果大于等于10,我们就利用ASCII码值将其转换为相应的字符并存在字符数组中.这样也就完成了对十六进制的转换.
注意我们在输出结果时,要逆序打印,因为我们在字符数组中储存结果时是倒着存的.