第五周项目4-数制转换
2016-09-29 11:30
375 查看
问题及代码:
运行结果:
![](http://img.blog.csdn.net/20160929112924448?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
知识点总结:
栈的应用问题
心得体会:
结合提示,此问题并不难分析;此外此题应用顺序栈和链栈均可解决,用顺序栈更为清晰(涉及一片连续存储空间)。
PS:补充一种数组常规解法^_^
#include <stdio.h>
void reversenum(int n,int r)
{
int a[100];
int i,len=0;
while(n>0) //除r取余
{
a[len]=n%r;
n/=r;
len++;
}
for(i=len-1;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
int main()
{
int n; //待转换的数
int r; //转换后的进制
while(scanf("%d %d",&n,&r)!=EOF)
reversenum(n,r);
return 0;
}
/* copyright (t) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:1.cpp *作者:常锐 *完成日期:2016年9月29日 *版本号:v1.0 *问题描述:把十进制的整数转换为任一进制数输出。请利用栈设计算法,并实现程序。 *输入描述:任意一个十进制整数(这里不考虑超精度问题) *程序输出:转换后的r进制数(2<=r<=9) */
#include <stdio.h> #include <malloc.h> typedef int Elemtype; typedef struct node { int data; struct node *next; } LiStack; void InitStack(LiStack *&l) { l=(LiStack *)malloc(sizeof(LiStack)); l->next=NULL; } void DestroyStack(LiStack *&l) { LiStack *pre=l,*p=l->next; while(p!=NULL) { free(pre); pre=p; p=p->next; } free(pre); } bool StackEmpty(LiStack *l) { return (l->next==NULL); } void Push(LiStack *&l,Elemtype e) { LiStack *p; p=(LiStack *)malloc(sizeof(LiStack)); p->data=e; p->next=l->next; l->next=p; } bool Pop(LiStack *&l,Elemtype &e) { LiStack *p; if(l->next==NULL) return false; p=l->next; e=p->data; l->next=p->next; free(p); printf("%d",e); return true; } bool GetTop(LiStack *l,Elemtype &e) { if(l->next==NULL) return false; e=l->next->data; return true; } void NumReversal(int n,int r) { LiStack *s; InitStack(s); Elemtype e; while(n>0) { e=n%r; Push(s,e); n/=r; } while(!StackEmpty(s)) Pop(s,e); printf("\n"); } int main() { int n,r; while(scanf("%d %d",&n,&r)!=EOF) NumReversal(n,r); return 0; }
运行结果:
知识点总结:
栈的应用问题
心得体会:
结合提示,此问题并不难分析;此外此题应用顺序栈和链栈均可解决,用顺序栈更为清晰(涉及一片连续存储空间)。
PS:补充一种数组常规解法^_^
#include <stdio.h>
void reversenum(int n,int r)
{
int a[100];
int i,len=0;
while(n>0) //除r取余
{
a[len]=n%r;
n/=r;
len++;
}
for(i=len-1;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
int main()
{
int n; //待转换的数
int r; //转换后的进制
while(scanf("%d %d",&n,&r)!=EOF)
reversenum(n,r);
return 0;
}
相关文章推荐
- Exchange 2007迁移Exchange 2010应该注意的13件事
- left join 多表联查
- Struts2的那点小事—从零学起
- Android6.0 显示系统(四) 图像显示相关
- 不用jquery等框架/库,查找一个页面上有多少种标签,并计算每种标签的个数
- 东南大学美术学考研2010-2016年复试分数线【汇总】
- linux 3.16 模块编译记录
- Linux入门:常用命令:环境变量
- Cocos2d-JS tiledMap 45度角地图坐标计算
- 第五周项目4-数制转换
- Hammer.js+轮播原理实现简洁的滑屏功能
- Internet of Things
- 【文件上传 前端】文件上传 前端 Part1 —— 传统表单上传
- linux
- 【文件上传 前端】文件上传 前端 Part1 —— 传统表单上传
- VxWorks 6.9 内核编程指导之读书笔记 -- Singnals
- AndroidStudio中布局文件没有预览图
- 使用QQ第三方登录 授权失败后点击确定 直接跳转当前activity的上一级activity
- mysql语句case when 的代码片段
- C语言之隐蔽问题[01 参数传递时参数列表初始化顺序]