将一个无符号十进制整数转换成(2-16)进制数并输出

版权声明:转载请注明出处 https://blog.csdn.net/nanhuaibeian/article/details/88172142

1. 基础知识

  1. 十进制转二进制
    方法为:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除依此步骤继续向下运算直到商为0为止。
    在这里插入图片描述
  2. 十进制转换为其他的进制同理
  3. 2进制转换为8进制之类的转换可以借助十进制完成,即先转换为10进制,然后将10进制转换为8进制
    可参考

2. 出现的问题

  1. 本来想借助函数f2实现将a转换为b进制的数,由于大于10的进制含有A代表10,B代表11,C代表12,D代表13,E代表14,F代表15,所以想着把数组f定义为字符串数组,但是问题出现在进制转换借助的余数为整数,需要存储确是字符,将小于10的余数直接赋给c时,打印便会异常,so这种方法行不通。
//进制转换
int f2(int a,int b){	//a代表整数,b代表需要转换的进制
	int temp,i=0,d;
	char c;
	temp = a;
	while(temp!=0){
		d = temp%b;
		if(d>15)	{
			printf("数据非法!!!");
			return 0;
		} 
		switch(d){
			case 10: c = 'A';break;
			case 11: c = 'B';break;
			case 12: c = 'C';break;
			case 13: c = 'D';break;
			case 14: c = 'E';break;
			case 15: c = 'F';break;
			default: c =d;printf("%c\n",c);break;//打印异常
		}
		
		f[i++] = c;
		temp = temp/b;
	}
	return i;
} 
  1. 解决办法
    进制转换函数得到的余数存储在整数数组中,转换函数不作操作,主函数输出打印时加switch语句判断进行处理即可

3. 代码

#include <stdio.h>
#define max 100
int f[max];	//为了使用方便,定义为全局变量
//进制转换函数
int f2(int a,int b){	//a代表整数,b代表需要转换的进制
	int temp,i=0,d;
	temp = a;
	while(temp!=0){ 
		f[i++] = temp%b; ;
		temp = temp/b;
	}
	return i;	//将转换后的进制个数返回 
} 
int main(){
	int a,b,n,i;
	char c; 	//用来接收大于9时的字母表示 
	printf("请输入一个十进制的整数a:");
	scanf("%d",&a);
	printf("请输入需要将其转化为几进制(2-16):");
	scanf("%d",&b);
	//调用进制转换函数 
	n = f2(a,b);
	//打印输出转换后的进制
	for(i=n-1;i>=0;i--){
		switch(f[i]){
			case 10: c = 'A';printf("%c ",c);break;
			case 11: c = 'B';printf("%c ",c);break;
			case 12: c = 'C';printf("%c ",c);break;
			case 13: c = 'D';printf("%c ",c);break;
			case 14: c = 'E';printf("%c ",c);break;
			case 15: c = 'F';printf("%c ",c);break;
			default: printf("%d ",f[i]);break;
		} 
	}

	return 0;
} 

4. 考试版

//将一个无符号十进制整数转换成(2-16)进制数并输出
#include "stdio.h"

void print(int num,int d) {
	int a[20];
	int n=0,r,i,temp;
	r=num;
	while(r!=0) {
		a[n++]= r%d;
		r = r/d;
	}
	
	for(i=n-1; i>=0; i--)
		switch(a[i]) {
			case 10:
				printf("A ");
				break;
			case 11:
				printf("B ");
				break;
			case 12:
				printf("C ");
				break;
			case 13:
				printf("D ");
				break;
			case 14:
				printf("E ");
				break;
			case 15:
				printf("F ");
				break;
			default:
				printf("%d ",a[i]);
				break;
		}
}

void main() {
	int num=17,d=16;
//	scanf("%d %d",&num,&d);
	print(num,d);
}

猜你喜欢

转载自blog.csdn.net/nanhuaibeian/article/details/88172142