进制转化(两种方法)

我们经常面对的进制转化,与其知道怎么去搜不如自己亲手做一个。 

两种方法(第一种)

#include<stdio.h>
int main()
{
  //求基取余的方法练习
	int arr[10];
	int i=0, num, t;
	scanf("%d %d", &num, &t);
	while (num > 0) {
		arr[i++] = num % t; //将每一个的元素都储存在数组中
		num = num / t; //不是除以10
	}
	for (--i; i >= 0; i--)//反正你i已经增加了,不如在到这输出,这个就像那个栈
		printf("%d",arr[i]);  //遵循后进先出原则
	return 0;
}

如果想了解栈的原理课参考我的另一篇: 【数据结构】-栈的基本操作(源码可以直接运行)_i-阿松!的博客-CSDN博客

第一种方法就是利用的是:求基取余 

以十进制转换为二进制为例:
十进制数11.2转换为二进制,整数部分(除基取余):
11/2=5……1(余数)
5/2=2……1
2/2=1……0
1/2=0……1
1/2=0……0
将以上所求余数倒序排放,即01011(整数部分)
小数部分(乘基取整):
0.2*2=0.4(取整数部分:0)
0.4*2=0.8(取整数部分:0)
0.8*2=1.6(取整数部分:1)
0.6*2=1.2(取整数部分:1)
……
按正序排放:0011……
合起来:01011.0011……(小数部分若取不到0,就像例题,则小数部分看需要多少位,即取多少位;若取得到0,则结束)
摘录自:十进制转换为n进制的方法:除基取余,乘基取整_小肥宅@的博客-CSDN博客_除基取余法和乘基取整

然后就是第二种方法,这个相比第一种方法真的麻烦很多,但是也要看看的。 

#include <stdio.h>
#include <string.h>
void convto(char* s, int n, int b);
int main(void) {
	char s[80]; //数组
	int  base, old;
	printf("请输入十进制数:");
	scanf("%d", &old);
	printf("请输入转换的进制:");
	scanf("%d", &base);
	convto(s, old, base);
	printf("%s\n", s);
	getchar();
	return 0;
}
void convto(char* s, int n, int b) {
	char bit[] = { "0123456789ABCDEF" };
	int len;
	if (n == 0) {
		strcpy(s, ""); //这个是用空覆盖
		return;
	}
	convto(s, n / b, b);
	len = strlen(s);
	s[len] = bit[n % b];
	s[len + 1] = '\0';
}

我真的感觉这个实在太麻烦了,他也运用了库函数,指针.....

反正尽量多知道和了解一些原理吧,说不定啥时候就用上了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

i-阿松!

请给我一毛钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值