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

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

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


转换器实例


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


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

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

 

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


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

实现代码


  
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <math.h>
  4. int top=-1;//top 变量时刻表示栈顶元素所在位置
  5. void push(char * a,char elem){
  6. a[++top]=elem;
  7. }
  8. void pop(char * a){
  9. if (top==-1) {
  10. return ;
  11. }
  12. //输出时要按照正确的格式显示给用户
  13. if (a[top]>=10) {
  14. printf("%c",a[top]+55);
  15. }else{
  16. printf("%d",a[top]);
  17. }
  18. top--;
  19. }
  20. //将各进制数转换成十进制数
  21. int scaleFun(char * data,int system){
  22. int k=(int)strlen(data)-1;
  23. int system_10_data=0;
  24. int i;
  25. for (i=k; i>=0; i--) {
  26. int temp;
  27. if (data[i]>=48 && data[i]<=57) {
  28. temp=data[i]-48;
  29. }else{
  30. temp=data[i]-55;
  31. }
  32. system_10_data+=temp*pow(system, k-i);
  33. }
  34. return system_10_data;
  35. }
  36. int main() {
  37. char data[100];
  38. printf("进制转换器,请输入原数据的进制(2-36):");
  39. int system;
  40. scanf("%d",&system);
  41. getchar();
  42. printf("请输入要转换的数据:");
  43. scanf("%s",data);
  44. getchar();
  45. int system_10_data=scaleFun(data, system);
  46. printf("请输入转换后的数据的进制:");
  47. int newSystem;
  48. scanf("%d",&newSystem);
  49. getchar();
  50. while (system_10_data/newSystem) {
  51. push(data,system_10_data%newSystem );
  52. system_10_data/=newSystem;
  53. }
  54. push(data,system_10_data%newSystem);
  55. printf("转换后的结果为:\n");
  56. while (top!=-1) {
  57. pop(data);
  58. }
  59. }

文章来源: 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个月内不可修改。