#include <stdio.h>
#include <stdlib.h>
#define N 8
void toBin(int n,int dec);
void toBin2(int n,int dec);
int main(){
//十进制转2进制
//toBin(6,2);//ok
//十进制转8进制
//toBin(26,8);//ok
toBin2(31,16);
}
/**
看一个例子
6转2进制
6%2=0
6/2=3 ---> 非0 可以继续算 ----> 3%2=1
3/2=1 ---> 非0 可以继续算 ----> 1%2=1
1/2=0 --->结束
*/
void toBin(int n,int dec){
char arr[N]={0};
int i=N-1;//由于最先算出的数是末尾 所以先指向末尾
arr[i--]=n%dec+'0';
while(n/dec!=0){
n=n/dec;
arr[i--]=n%dec+'0';
}
//输出
i=0;
for(i=0;i<N;i++){
if(arr[i]==0){
}else {
printf("%c,",arr[i]);
}
}
}
/**
转16进制
其实原理还是一样 不同的是 对于超过9的数字 要表示为A
*/
void toBin2(int n,int dec){
char arr[N]={0};
int i=N-1;//由于最先算出的数是末尾 所以先指向末尾
//控制字符 超过10的要输出A
if(n%dec<=9){
arr[i--]=n%dec+'0'; //
}else{
//n%dec-10+'A';如果n%dec是10 这么处理就是A了
arr[i--]=n%dec-10+'A';
}
while(n/dec!=0){
n=n/dec;
if(n%dec<=9){
arr[i--]=n%dec+'0'; //
}else{
//n%dec-10+'A';如果n%dec是10 这么处理就是A了
arr[i--]=n%dec-10+'A';
}
}
//输出
i=0;
for(i=0;i<N;i++){
if(arr[i]==0){
}else {
printf("%c,",arr[i]);
}
}
}