输入一个十进制数N,将它转化为R进制数输出(C语言版)

我们先拿十进制转化为二进制来举例
我在b站上学习到十进制转为二进制的算法为:

输入一个十进制数N,将它转化为R进制数输出(C语言版)_第1张图片
比如:十进制9转化为二进制的步骤为

输入一个十进制数N,将它转化为R进制数输出(C语言版)_第2张图片
根据思路代码为:

#define _CRT_SECURE_NO_WARNINGS
#include
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循环从后向前输出。

你可能感兴趣的:(C,c语言,算法)