当前位置: 首页 > news >正文

设计程序,利用栈实现数值转换

二、利用栈实现数值转换,先定义一个栈的顺序存储结构,那么我们需要定义一个结构体,结构体里面有个int类型的数组,还有一个top用来存储栈顶元素的下标。栈是一种基本的数据结构,它遵循先进后出的原则。这意味着最后添加到栈中的元素将会首先被取出。栈通常具有两个主要操作:压栈:将元素添加到栈的顶部。出栈:从栈的顶部移除元素。输入转化之前的数,并且通过进制转化,计算出他的sum,再通过sum来转化成对应的进制,程序运行结果如图2-1。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>
#define Maxsize 100// 定义顺序栈的结构体
typedef struct SqStack
{int data[Maxsize];// 存储栈中元素的数组int top;// 栈顶指针
}SqStack;// 初始化栈
void Init_Sqstack(SqStack *S)
{S->top = -1;// 栈初始化为空,栈顶指针设为-1
}// 进栈操作
bool push_SqStack(SqStack *S,int x)
{if(S->top == Maxsize - 1)return false;// 栈满,返回falseelseS->data[++S->top] = x;// 元素x进栈,栈顶指针加return true;
}// 出栈操作
bool pop_SqStack(SqStack *S,int *x)
{if(S->top == -1)return false;// 栈空,返回falseelse{*x = S->data[S->top];// 将栈顶元素赋值给xS->top--;// 栈顶指针减1}return true;
}// 展示栈中元素
void show_SqStack(SqStack S)
{for(int i = S.top; i >= 0; i--){printf("%d ",S.data[i]);// 从栈顶开始打印栈中元素}
}// 将字符数组转换为对应进制的整数
int char_to_num(char *a,int x)
{int lenth = strlen(a);// 字符串长度int num[100];// 存储转换后的每一位数字int sum = 0;// 转换后的整数值for(int i = 0; i < lenth; i++){if(a[i] >= '0' && a[i] <= '9')// 如果是数字字符,转换为数字num[i] = (a[i]-'0');elsenum[i] = (a[i]-'A'+10);// 如果是字母字符,转换为对应的数字(A-F为10-15)}for (int i = 0; i < lenth; i++){sum += num[i] * pow(x, lenth - i - 1); // 按权展开求和}return sum;
}int main()
{SqStack S;Init_Sqstack(&S);// 初始化栈  printf("请输入想要转化前数的进制:");// 提示用户输入原数的进制int i;scanf("%d",&i);// 读取用户输入的进制 printf("\n请输入想转化后的进制:");// 提示用户输入目标进制int j;scanf("%d",&j);// 读取用户输入的目标进制printf("\n请输入想要转化的数:");// 提示用户输入需要转换的数char s[100];scanf("%s", s);// 读取用户输入的数int m;m = char_to_num(s,i);// 将字符数组转换为对应进制的整数// 将整数转换为目标进制的数,并依次入栈 while(m){push_SqStack(&S,m % j);// 取余数并入栈m = m / j;// 整除目标进制数}show_SqStack(S);// 展示栈中元素,即转换后的目标进制数  return 0;
}

图2-1 进制转化结果图

 

 

http://www.lryc.cn/news/377486.html

相关文章:

  • QSharedMemory使用详解
  • 中电金信:保险业多项举措共绘数字化转型新篇章
  • Gartner发布2024年人工智能技术成熟度曲线:29项决定人工智能领域发展方向的前沿和趋势性技术
  • 顺势而为:雷军、小米与创业成功的深层思考
  • Java+ffmpeg 合并两个mp4文件
  • 汽车IVI中控开发入门及进阶(三十一):视频知识扫盲
  • 【后端】Java学习笔记(二周目-1)
  • PDF文档翻译软件哪个好?分享5款快速翻译的工具
  • 哪些因素驱动新零售发展?新零售与传统零售、电子商务区别在哪?
  • 使用代理IP常见问题及解答
  • 重磅!鹅厂大牛带你30分钟玩转AI智能结对编程!
  • 研究Redis源码的一些前期准备
  • 用PHP来调用API给自己定制一个“每日新闻”
  • AGI时代,程序员想学习大语言模型(LLM),应该从哪里开始?
  • Vue在表单校验中trigger属性指定何时触发校验规则
  • 【多线程实例】
  • 数据治理在数据提取中的角色:确保数据质量和安全
  • Nuxt快速学习开发 - Nuxt3静态资源Assets
  • 为什么企业需要数据挖掘平台?哪个比较好呢?
  • leetCode-hot100-链表专题
  • 【ai】tx2-nx:配置tritonserver2.17.0-jetpack4.6 环境并运行例子
  • Spring和Spring Boot常用注解介绍及使用
  • 【计算机毕业设计】211校园约拍微信小程序
  • 笨蛋学算法之LeetCodeHot100_1_两数之和(Java)
  • 用ip link add link命令创建vlan子设备
  • AD复用布局布线
  • 【深度学习驱动流体力学】采集OpenFOAM仿真的流体力学数据送入到强化学习DQN模型训练
  • 国内公开数据
  • QT QByteArray 的用法
  • InPixio Photo Cutter v10 解锁版安装教程 (懒人抠图工具)