我们经常面对的进制转化,与其知道怎么去搜不如自己亲手做一个。
两种方法(第一种)
#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';
}
我真的感觉这个实在太麻烦了,他也运用了库函数,指针.....
反正尽量多知道和了解一些原理吧,说不定啥时候就用上了。