我们先拿十进制转化为二进制来举例:
我在b站上学习到十进制转为二进制的算法为:
比如:十进制9转化为二进制的步骤为
根据思路代码为:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void change(int n)
{
if (n > 0)
{
change(n / 2);
printf("%d", n % 2);
}
}
int main()
{
int n = 0;
printf("input number:");
scanf("%d", &n);
printf("%d对应的二进制为: ", n);
change(n);
printf("\n");
return 0;
}
再写十进制向R进制转化的问题:
转化的思路同十进制转化二进制,用÷商取余的方法来找到转化后的数。
代码为:
int main() {
int number; //输入的十进制数
int system; //输入需要转换的进制
char s[50];
int i; //用来存储进制转化后的长度
int length; //用来最后的打印
int flag; //用来存储输入数的+或-
printf("先输入一个整数,按空格后再输入转化的进制数\n");
while ((scanf("%d%d", &number , &system)) != EOF)
{
i = 0;
flag = 0; //等于0时代表正数
if (number < 0) {
number = -number; //取反
flag = 1; //标记为-数
}
while (number)
{
if (number % system <= 9) {
s[i] = (number % system) + '0'; //数字加上’0’变成字符类型,因为‘1’的对应编码是49的二进制码,
} //在ASCII码里‘0’对应的刚好是48的二进制码。所以加上‘0’,变成了字符 ‘1’
else if (number % system == 10)
s[i] = 'A';
else if (number % system == 11)
s[i] = 'B';
else if (number % system == 12)
s[i] = 'C';
else if (number % system == 13)
s[i] = 'D';
else if (number % system == 14)
s[i] = 'E';
else if (number % system == 15)
s[i] = 'F';
number /= system;
i++;
}
length = i;
if (flag == 1)
printf("-"); //如果是负数先打印出-
for (i = length - 1; i >= 0; i--) //从后往前打印
printf("%c", s[i]);
printf("\n");
}
return 0;
}
注释:
s[i] = (number % system) + '0'; //目的是将int类型转化为char类型。
for (i = length - 1; i >= 0; i--) //从后往前打印
printf("%c", s[i]); //从十进制到二进制可知,从后往前输出,所以用for循环从后向前输出。