C语言实现进制转换(详)

目录:
(一)任意进制转十进制
(二)十进制转任意进制
(三)二进制转十六进制(重难点)

 

(一)任意进制转十进制

#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;
} 


 

发布了188 篇原创文章 · 获赞 29 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览