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

文章介绍了如何使用C语言编程实现从十进制数转化为二进制数的过程,以及扩展到任意R进制转化的算法,采用的是除商取余的方法。代码示例详细展示了转换的逻辑,包括处理负数的情况,并将结果以字符形式输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们先拿十进制转化为二进制来举例
我在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循环从后向前输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值