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

举报
C语言与CPP编程 发表于 2021/08/04 23:49:34 2021/08/04
【摘要】 进制转换器项目要求:用户提供需要转换的数据和该数据的进制,以及要转换的进制,进制转换器提供给用户最终的正确转换的结果。 转换器实例 例如,用户提供了一个十进制数:10,要求将此数据以二进制形式转换,则通过进制转换器转换的最终结果应该:1010。 提示:此进制转换器可以在 2-36 进制之间对数据进行任意转换。各进制中对应的数字如下表:   设计思...

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


转换器实例


例如,用户提供了一个十进制数: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);
      	}
      }
  
 

文章来源: blog.csdn.net,作者:C语言与CPP编程,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_41055260/article/details/119381988

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。