目录:
(一)任意进制转十进制
(二)十进制转任意进制
(三)二进制转十六进制(重难点)
(一)任意进制转十进制
#include <stdio.h>
int main(){
int x,p; //x输入数字 p该数的进制数
scanf("%d",&x);
scanf("%d",&p);
int y=0,product=1;
while(x!=0){
y=y+(x%10)*product;
x=x/10;
product=product*p;
}
printf("%d",y);
return 0;
}
(二)十进制转任意进制
注意:这里只能用do...while(原因:如果输入的是0,那么我们希望a[0]=0)
#include <stdio.h>
int main(){
int x,p; //x为十进制数,p为目标进制大小
scanf("%d",&x);
scanf("%d",&p);
int a[100]; //存放余数
int count=0;
do{
a[count++]=x%p;
x=x/p;
}while(x!=0);//当商不为0时进行循环
for(int i=count-1;i>=0;i--){
printf("%d",a[i]);
}
}
(三)二进制转十六进制
主要思路:确定十六进制数组大小->确定二进制数数组大小->二进制每过4位存入十六进制1位
思路:输入的二进制数可能能不是4的整数倍,那么我们该如何处理呢?我们知道二进制不够4位,用0占位。于是我先将输入的二进制数除以10000取余(看4位),这样就确定十六进制数组的大小,反过*4来就知道了二进制数的大小。
#include <stdio.h>
#include <math.h>
int main(){
//输入2进制数
int x;
scanf("%d",&x);
//确定:16进制数组大小size与2进制数组大小size*4.
int X=x;
int size=0;
while(true){
if(X%10000!=0){ //采取看4位二进制的方法
size++;
X=X/10000;
}else{
break;
}
}
char tt[size]; //16进制数数组
int t[size*4]; //2进制数数组
//存入
int sum=0;
int count=0;
for(int i=0;i<sizeof(t)/sizeof(int);i++){
t[i]=x%10;
x=x/10;
sum=sum+t[i]*pow(2,count);
count++;
if(count%4==0){
if(sum>=10){
tt[--size]=65+(sum-10); //字符'A'的ascii码为65
}else{
tt[--size]='0'+sum;
}
count=0;
sum=0;
}
}
for(int i=0;i<sizeof(tt);i++){
printf("%c",tt[i]);
}
return 0;
}