数据结构之进制转换器实现

Posted C语言与CPP编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构之进制转换器实现相关的知识,希望对你有一定的参考价值。

进制转换器项目要求:用户提供需要转换的数据和该数据的进制,以及要转换的进制,进制转换器提供给用户最终的正确转换的结果。


转换器实例


例如,用户提供了一个十进制数:10,要求将此数据以二进制形式转换,则通过进制转换器转换的最终结果应该:1010。


提示:此进制转换器可以在

2-36 进制之间对数据进行任意转换。各进制中对应的数字如下表:

 

设计思路
当用户给定 2 - 36 进制中的任意一进制数时,最简单的方法是使用顺序存储结构进行存储,即使用字符串数组存储。


转化时,最直接的思路就是先将该数转化为十进制数据,然后再由十进制转化成要求的进制数,最终的结果用栈结构存储(先进后出),这样最终显示
给用户的是正常的数据。

实现代码

#include <stdio.h>
#include <string.h>
#include <math.h>
int top=-1;//top 变量时刻表示栈顶元素所在位置
void push(char * a,char elem){
	a[++top]=elem;
}
void pop(char * a){
	if (top==-1) {
		return ;
	}
	//输出时要按照正确的格式显示给用户
	if (a[top]>=10) {
		printf("%c",a[top]+55);
	}else{
		printf("%d",a[top]);
	}
	top--;
}

//将各进制数转换成十进制数
int scaleFun(char * data,int system){
	int k=(int)strlen(data)-1;
	int system_10_data=0;
	int i;
	for (i=k; i>=0; i--) {
		int temp;
		if (data[i]>=48 && data[i]<=57) {
			temp=data[i]-48;
		}else{
			temp=data[i]-55;
		}
		system_10_data+=temp*pow(system, k-i);
	}
	return system_10_data;
}
int main() {
	char data[100];
	printf("进制转换器,请输入原数据的进制(2-36):");
	int system;
	scanf("%d",&system);
	getchar();
	printf("请输入要转换的数据:");
	scanf("%s",data);
	getchar();
	int system_10_data=scaleFun(data, system);
	printf("请输入转换后的数据的进制:");
	int newSystem;
	scanf("%d",&newSystem);
	getchar();
	while (system_10_data/newSystem) {
		push(data,system_10_data%newSystem );
		system_10_data/=newSystem;
	}
	push(data,system_10_data%newSystem);
	printf("转换后的结果为:\\n");
	while (top!=-1) {
		pop(data);

	}
}

以上是关于数据结构之进制转换器实现的主要内容,如果未能解决你的问题,请参考以下文章

数据结构12: 实践项目之进制转换器

进制转化之递归 && 栈

Silverlight 中的十进制转换器无法正确处理丢失焦点

shell脚本之使用bc工具实现数值转换(浮点转二进制)

Java入门:基础算法之二进制转换为十进制

JDK源码之Integer类—toString()方法