poj 2710:数制转换
2013-12-01 15:05
190 查看
2710:数制转换
总时间限制: 1000ms 内存限制: 65536kB描述求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。
不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
输入输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。
a,b是十进制整数,2 =< a,b <= 16。
输出输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。
样例输入
15 Aab3 7
样例输出
210306
提示可以用字符串表示不同进制的整数
#include<iostream> #include<algorithm> #include<vector> #include<stack> #include<cstring> using namespace std; int main() { int a,b,sum; char arr[]="0123456789abcdef"; //预处理 const int arrsize=sizeof(arr)/sizeof(char); char s[50]; while(cin>>a>>s>>b) //输入 { if(s[0]=='0') //判断输入是否为0,是则输出0,继续下一组输入 {cout<<"0"<<endl; continue;} int t=1; int len=strlen(s); stack<char> St; //声明栈 sum=0; for(int i=0;i<len;i++) St.push(tolower(s[i])); //将输入的整数按小写入栈 while(!St.empty()) //一个个出栈,然后判断该字符在arr数组中的位置,然后进行累乘,累加 { for(int j=0;j<arrsize;j++) if(St.top()==arr[j]) { // cout<<St.top(); sum+=(j*t); t*=a; St.pop(); j=0; break; } } // cout<<sum; while(sum) //以上步骤得到一个将把a换转成10进制的数sum St.push(arr[sum%b]); //然后按照除数取余法入栈 sum/=b; } while(!St.empty()) //按顺序出栈,即得到结果 { cout<<St.top(); St.pop(); } cout<<endl; } return 0; }
相关文章推荐
- 面向对象7_【异常】【异常的处理】【异常的应用】
- C#中递归算法的总结
- S3C6410裸板纯汇编流水灯的实现
- 解决ORA-27154,ORA-27300,ORA-27301:No space left on device
- VSphere5.1嵌套安装
- Visual Studio 2008 环境变量的配置
- 风雨20年:我所积累的20条编程经验
- ubuntu下如何查找某个文件的路径
- 中国海洋大学第四届朗讯杯高级组 Playing Fair with Cryptography
- UVa 10169 Urn-ball Probabilities ! (概率)
- word上标下标的快捷键
- headerView跟随 cell一起滚动 及headerView 作为表头背景的实现
- Python核心编程--学习笔记--7--字典和集合
- 制作飞镖忍者(1) Cocos2d-x 3.0alpha0
- 第十四周-成绩处理
- 养老问题
- HTTP协议是无状态协议,Session,Cookie的解释
- [JAVA]《Java 核心技术》(四)多线程
- 自进程名找apk
- OC字符串常用函数