数制转换(数据结构课程设计C语言版)

2023-10-27

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <math.h>
#include<string.h>
using namespace std;


typedef struct SNode/定义一个栈,采用无头结点的单链表结构
{
	int data;//定义栈的数据域
	struct SNode *next;//定义栈的指针域
}SNode,*LinkStack;

bool Is_Empty(LinkStack S)//判空
{
	if(!S)
		return true;
	else
		return false;
}

void InitStack(LinkStack &S)//初始化
{
	S = NULL;
}

bool Push(LinkStack &S,int e)//压栈
{
	SNode* p = (SNode*)malloc(sizeof(SNode)) ;//开辟一个栈单元
	if(!p )
	{
		return false;//内存单元不够,栈溢出
	}
	p->data = e;
	p->next = S;
	S=p;

	return true;
}
bool Pop(LinkStack &S,char &e)//出栈
{
	SNode* p ; 
	if(!S)//栈空
	{
		return false;
	}
	else
	{
		p = S;
		e = p->data;
		S = p->next;
		free(p);
		return true;
	}	
}

//数制转化
int Number_system_conversion_1(char arr[],int sz,float n1)//n1进制转化为10进制
{
	int i;
	int j;
	int n = 0;
	int sum = 0;
	for(i = 0;i<sz;i++)
	{
		char tmp = arr[sz-1-i];
		switch(tmp)
		{
		case '1':
			j = 1;
			break;
		case '2':
			j = 2;
			break;
		case '3':
			j = 3;
			break;
		case '4':
			j = 4;
			break;
		case '5':
			j = 5;
			break;
		case '6':
			j = 6;
			break;
		case '7':
			j = 7;
			break;
		case '8':
			j = 8;
			break;
		case '9':
			j = 9;
			break;
		case 'A':
			j = 10;
			break;
		case 'B':
			j = 11;
			break;
		case 'C':
			j = 12;
			break;
		case 'D':
			j = 13;
			break;
		case 'E':
			j = 14;
			break;
		case 'F':
			j = 15;
			break;
		}
		int c =j * pow(n1,n);
		n++;
		sum = sum+c;
	}
	return sum;
}
//主要思想:假设输入的两个参数分别为num_1,n1,本质上就是将num_1这个字符数组从数组的最后一个元素开始取,取出第一个转化为对应的int型数(1对应1,A对于10等),然后乘以1,取出第二个然后乘以10,这样累加就得到了n1进制数转化为10进制的数。
void Number_system_conversion_2(int num_2,int n2)//10进制转化为n2进制
{
	LinkStack S;
	InitStack(S);
	char d;
	while(num_2)
	{
		switch (num_2%n2)
		{
			case 0:
				Push(S,'0');
				break;
			case 1:
				Push(S,'1');
				break;
			case 2:
				Push(S,'2');
				break;
			case 3:
				Push(S,'3');
				break;
			case 4:
				Push(S,'4');
				break;
			case 5:
				Push(S,'5');
				break;
			case 6:
				Push(S,'6');
				break;
			case 7:
				Push(S,'7');
				break;
			case 8:
				Push(S,'8');
				break;
			case 9:
				Push(S,'9');
				break;
			case 10:
				Push(S,'A');
				break;
			case 11:
				Push(S,'B');
				break;
			case 12:
				Push(S,'C');
				break;
			case 13:
				Push(S,'D');
				break;
			case 14:
				Push(S,'E');
				break;
			case 15:
				Push(S,'F');
				break;
		}
		num_2 = num_2/n2;
	}
	printf("转化后的数字为: ");
	while(!(Is_Empty(S)))
	{
		Pop(S,d);	
		printf("%c",d);
	}
	printf("\n");
	system("pause");
}
//10进制转化为n2进制主要思想:本质上就是采用进栈出栈的顺序不同
int main()
{
	char arr[10];
	int n1;
	int n2;
	printf("*************************数制转换****************************\n");
	printf("**********输入**********\n");
	printf("请输入一个数:");
	scanf("%s",&arr);
	printf("请输入原本的进制数(最高为16进制):");
	scanf("%d",&n1);
	printf("请输入想转换的进制(最高为16进制: ");
	scanf("%d",&n2);
	int sz = strlen(arr);
	//这里是需要额外注意的,如果用的是sizeof,那么sz的大小就是恒定的10,这样就达不到目的了,应该用strlen()这样就可以遇到‘\0’后停止。让sz = 输出的字符长度。
	//另外这里在编程时,还遇到了一个问题,即使使用sizeof()可以,sizeof()函数也要在Number_system_conversion_1()之外使用,因为在函数内使用,那么的sizeof(arr)所表示的是数组首地址的大小而非数组大小。
	
	int num_2 = Number_system_conversion_1(arr,sz,n1);
	printf("**********输出**********\n");
	Number_system_conversion_2(num_2,n2);
	return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数制转换(数据结构课程设计C语言版) 的相关文章

随机推荐

  • intellij idea 双击选中一个变量而不是单词

    在keymap 里搜索 select Word at caret 然后双击并在弹出选项里选add mouse shortcut 然后选double click 再在下面click pad 区域点一下 就可以和eclipse一样双击选中完整的
  • 查看权限linux文件权限

    查看权限 rw rw r 一共有10位数 其中 最前面那个 代表的是类型 中间那三个 rw 代表的是所有者 user 然后那三个 rw 代表的是组群 group 最后那三个 r 代表的是其他人 other 然后我再解释一下后面那9位数 r
  • 全国大学生软件测试大赛 Web性能测试--实例(一)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 Web性能测试 实例 一 咪咕音乐测试 一 测试范围 二 测试要求 step1 a 操作流程 i 进入到咪咕音乐页面 点击 歌手 ii 对歌手进行筛选操作 点击红框内的任意按
  • 学习笔记:基于Transformer的时间序列预测模型

    1 一些准备的说明 为了便于读者理解 笔者将采取一个盾构机掘进参数预测的实际项目进行Transformer模型的说明 此外 该贴更多用于本人的学习记录 适合于对Transformer模型已经有一定了解的读者 此此次外 不定期更新中 一些参考
  • mybatisPlus分页查询的配置类

    SpringBoot中分页查询的配置类 Configuration public class MybatisPlusConfig Bean public MybatisPlusInterceptor mybatisPlusIntercept
  • 计算机视觉服务系统

    tornado教程HTTP教程 Eureka教程Eureka1Eureka2
  • Colossal-AI的安装

    最近在学习stable diffusion model 但是这个模型成本比较高 作为低端学习者 借助colossal ai加速训练 即能满足显卡要求又能节约时间 Colossal AI 是一个集成的大规模深度学习系统 具有高效的并行化技术
  • 二叉树变成搜索二叉树

    给你一个普通的二叉树 把它变成搜索二叉树 要求不改变这个树的结构 例如 给你如下二叉树 10 2 7 8 4 结果是 8 4 10 2 7 思路 1 中序遍历该二叉树 把结果存在临时数组 arr 中 2 对 arr 进行排序 3 把 arr
  • C++(11):true_type, false_type

    true type和false type是integral constant实例化的别名 C 11 integral constant 风静如云的博客 CSDN博客 template
  • matlab机械手ikine函数,matlab机器人工具箱10.1(有函数说明)

    实例简介 机器人工具箱10 1版 有例子可以学习 希望对大家有所帮助 实例截图 核心代码 robot工具箱 V10 1有例子 robot工具箱10 1及例子 matlab robot V10 1工具箱 pdf rvctools common
  • OpenXml操作Word的一些操作总结.无word组件生成word.

    OpenXml相对于用MS提供的COM组件来生成WORD 有如下优势 1 相对于MS 的COM组件 因为版本带来的不兼容问题 及各种会生成WORD半途会崩溃的问题 2 对比填满一张30多页的WORD来说 包含图 表等 用COM组件来生成会占
  • 【笔记】AOE网与关键路径

    AOE网 关键路径 求关键路径的算法实现 AOE网是以边表示活动的有向无环网 在AOE网中 具有最大路径长度的路径称为关键路径 关键路径表示完成工程的最短工期 1 AOE网 AOE网是一个带权的有向无环图 其中用顶点表示事件 弧表示活动 权
  • PCL生成线段点云

    生成三角形 生成平行四边形 生成凸包 pcl 生成线段点云 pcl官方有生成球体 圆柱体 圆锥体的相关函数 似乎没有生成线段的函数 正好有需要 所以自己写了两个 分别是根据数量和步长生成 原理 原理很简单 已知两个三维点p1 p2 求出方向
  • vue中使用高德地图marker标记点的setLabel,在不同层级下控制显示隐藏

    vue中使用高德地图marker标记点的setLabel 在不同层级下控制显示隐藏 设置点标注的文本标签 marker setLabel offset new AMap Pixel 1 0 设置文本标注偏移量 content div nam
  • 全局获取Context的技巧(再也不要为获取Context而感到烦恼)

    前言 Android提供了一个Application类 每当应用程序启动的时候 系统就会自动将这个类进行初始化 而我们可以定制一个自己的Application类 以便管理程序内的一些全局状态信息 比如说全局Context 定制自己的Appl
  • SaaS与本地部署 路在何方?

    了解云计算的一定都听过四个 高大上 的概念 On Premises 本地部署 IaaS 基础设施及服务 PaaS 平台即服务 和SaaS 软件即服务 这几个术语并不好理解 ServiceHot 旗下现产品有 ServiceHot ITSOM
  • Issues with peer dependencies found

    peer dependencies 默认存在的依赖 通常在开发组件和插件的时候用到 表示这些依赖不用下载 项目的仓库里有 例子 package json peer dependencies react 问题背景 今天安装一些依赖 报了这个错
  • Linux驱动编程(分层分离编程思想)

    1 面向对象 字符设备驱动程序抽象出一个 file operations 结构体 我们写的程序针对硬件部分抽象出 led operations 结构体 2 分层 上层实现硬件无关的操作 比如注册字符设备驱动 leddrv c 下层实现硬件相
  • @Autowired 和 @Resource 分别什么时候使用比较好

    Autowired 和 Resource 都是用于依赖注入的注解 但是它们有一些不同的使用场景 Autowired 是 Spring 框架提供的注解 它可以自动装配一个 Bean 可以根据类型进行匹配 也可以根据名称进行匹配 当有多个 Be
  • 数制转换(数据结构课程设计C语言版)

    define CRT SECURE NO WARNINGS include