九度OJ 1118 数制转换(a进制 -> b进制)
2017-04-24 22:35
211 查看
原题地址
http://ac.jobdu.com/problem.php?pid=1118输入a进制数n,转为对应b进制的数。
解题思路
一道水题。进制转换的问题以前大一学C语言的时候就做过,这道题目比较简单,a和b都在2~16以内,很常规,不需要更多的字母来表示(还记得以前做过一道26进制内的,当时做了很久哈)
遇到两个数进制转换的问题,一般采取的办法都是:先将源进制的数转为中间的十进制数,再由十进制转到目标进制的数。前者采取诸位加权累加,后者则是不断取余取商的方法。
AC代码
#include <iostream> #include <cstring> using namespace std; int main() { ios::sync_with_stdio(false); //关闭和stdio的同步 int a, b; char num[100]; while(cin >> a >> num >> b) { int dec = 0, base = 1, x; //a进制转10进制 for(int i = strlen(num)-1; i >= 0; --i) { if (num[i] >= '0' && num[i] <= '9') x = num[i] - '0'; else if (num[i] >= 'a' && num[i] <= 'f') x = num[i] - 'a' + 10; else x = num[i] - 'A' + 10; dec += x*base; //加权累加 base *= a; //权重加倍 } //cout << dec << endl; if (dec == 0) //0是特殊情况 { cout << 0 << endl; continue; } //10进制转b进制 int out[100], cnt = 0; while (dec) //直到不能再取余 { out[cnt++] = dec % b; //先取余 dec /= b; //再取商 } for (int i = cnt-1; i >= 0; --i) { if (out[i] >= 10) cout << (char)(out[i] - 10 + 'A'); else cout << out[i]; } cout << endl; } return 0; }
相关文章推荐
- 九度OJ 1118 数制转换
- 九度OJ 1118:数制转换 (进制转换)
- 九度OJ 1118:数制转换 (进制转换)
- 九度OJ 题目1118:数制转换
- 九度oj-1118-数制转换
- 九度OJ题目1118:数制转换
- 题目1118:数制转换
- 题目1118:数制转换
- 1118_数制转换
- c语言版数据结构(奇迹冬瓜)-栈实战(2)整数进制转换<10进制到2,8,16进制>
- 九度OnlineJudge题目1118:数制转换
- 九度OJ 1080 (大整数的任意进制的转换)
- c++ 数制转换 一个十进制的数变十几进制的和几进制的数
- 进制->原理本质/加法乘法表(个人理解)
- POJ NOI0113-01 数制转换(Bailian2710)【进制】
- ERROR 1118 (42000): Row size too large (> 8126).
- 九度OJ 题目1208:10进制 VS 2进制
- 数制转换问题:确定进制
- 进制转化 10-->(2-16)
- 数制转换--十进制转换任意进制---栈--初始化--调用--每日一练(七)