sdut oj1252 进制转换(栈)
2016-07-29 19:48
381 查看
题目链接:点击打开链接
科科科,注意n为0的情况
代码实现:
进制转换
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入一个十进制数N,将它转换成R进制数输出。输入
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。输出
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。示例输入
7 2 23 12 -4 3
示例输出
111 1B -11
提示
科科科,注意n为0的情况
代码实现:
#include <iostream> #include <stdio.h> #include <stdlib.h> using namespace std; #define stackmax 10000 #define stacknum 10000 typedef struct { int *top; int *base; int stacksize; } qstack; int initstack(qstack &s) { s.base=(int *)malloc(stackmax*sizeof(int)); if(!s.base) exit(0); s.top=s.base; s.stacksize=stackmax; return 0; } int push(qstack &s,int n) { if(s.top-s.base>=s.stacksize) { s.base=(int *)realloc(s.base,(s.stacksize+stacknum)*sizeof(int )); if(!s.base) exit(0); s.top=s.base+s.stacksize; s.stacksize+=stacknum; } *s.top++=n; return 0; } ///进制转换 int conversion(qstack &s,int n,int m) { int t; while(n) { t=n%m; n=n/m; push(s,t); } return 0; } int put(qstack &s) { while(s.top>s.base) { if(*(s.top-1)<10) printf("%d",*(s.top-1)); else { printf("%c",'A'+*(s.top-1)-10); } s.top--; } return 0; } int main() { qstack s; int n,m; while(~scanf("%d%d",&n,&m)) { if(n==0) printf("0");/// if(n<0) { printf("-"); n=-n; } initstack(s); conversion(s,n,m); put(s); printf("\n"); } return 0; }
相关文章推荐
- HDU--1233最小生成树之kruskal算法
- 用c++编写一段完整代码,要求判断一个进程(例如qq.exe)是否存在,若存在,输出存在,不存在就输出不存在。
- 多项式求和
- SVD 详解 与 spark实战
- 当浏览器窗体改变时,div跟着变动方法
- Laravel 5.2中记录运行时 SQL
- 0728linux基础内容小记
- 文章标题
- 原生js实现随着滚动条滚动,导航会自动切换的效果
- tjut 4662
- 原生代码封装好的增删改查
- Spring AOP原理及拦截器
- <hdu - 1863> 畅通工程 并查集和最小生成树问题
- (转)Android编码命名规范
- POJ 1830 开关问题(高斯消元)
- 【effective c++】资源管理
- Android ndk探索之一(利用Android Studio和ndk编译c)
- hdu 4151 The Special Number
- Binary Tree Level Order Traversal
- 字符串匹配算法 之 Sunday