【第20题】给定一个十进制数d和一个进制X,求它的X进制表示

本文介绍了一种使用C语言实现将十进制数转换为2到16进制的方法,主要采用除留余数法。代码中包含详细的解释,适合初学者理解。通过输入十进制数和目标进制,程序会输出相应的进制表示。对于不熟悉此算法的读者,建议手动计算几个例子以加深理解。

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

一、题目描述

循环输入。给定一个十进制数 d d d和一个进制 X ( 2 ≤ X ≤ 16 ) , X(2≤X≤16), X(2X16)输出它的 X X X进制表示。当没有任何输入时,程序结束。

二、解题思路

  • 除留余数法。模对应的进制,不断取留余数,并且除上对应的值,直到商为0停止。将余数逆序排列得到的就是对应转换后的值。

三、解题代码

#include <stdio.h>
#include <string.h>
void Print(int num)
{
	if (10 <= num && num <= 16)
	{
		printf("%c",num - 10 +'A');
	}
	else
	{
		printf("%d",num);
	}
}

int main()
{
	int ans[100];
	int d,x;
	while(scanf("%d%d",&d,&x)!= EOF)
	{
		memset(ans,0,100);
		if (0 == d)
		{
			printf("0\n");
			continue;
		}
		else if (d < 0)
		{
			printf("-");
			d = -d;
		}
		while(d)
		{
			ans[++ans[0]] = d % x;
			d /= x;
		}
		
		for(int i = ans[0]; i > 0; --i)
		{
			Print(ans[i]);
		}
		printf("\n");
	}
	return 0;
}

这里的除留余数法要是还不理解的话,不要着急,举两个例子看一看,比如说举5和7的例子,自己动手在纸上演算一下除留余数法,然后对着代码理解一下,要是还不理解可以在文章下面评论留言或者私信作者。

四、写在最后

该文章内容是我阅读了优快云博主英雄哪里出来的博文后,自己记录的一些观点和想法,希望对大家有帮助。英雄哪里出来的对应博文地址:传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值