admin 管理员组文章数量: 1086061
进制转换——36进制
题目:进制转换类
题目描述
将M进制的数X转换为N进制的数输出。
输入
第一行,一个整数T,代表测试数据组数。
接着T行,输入32位二进制数
输出
输出X的N进制表示的数。
测试样例
输入
10 2
11
输出
1011
注意:注意输入时如有字母,则字母为大写,输出时如有字母,则字母为小写。
刚一看题,懵了,以前哪里听过三十六进制,吓坏我了,不过当你了解三十六进制就是所谓的 16进制后面用 G H I … Z 后,便豁然开朗了(ง •̀_•́)ง |
---|
思路:
1、先处理输入过程,赋值给相应的值
2、将M进制的X转换为10进制
3、将10进制数转换为N进制
4、输出处理
程序如下:
#include <iostream>
#include <stack>
#include <math.h>
using namespace std;
/*** 一个十进制整数转换为N进制之间的任意进制数输出* @param ary :要转换的进制* @param num :要转换的数*/
void Dec_To_All(int ary, long long int num) {int temp = 0;stack<char> number_stack;if (ary <= 36 || ary > 1) { //不满足条件则退出if (ary > 1 && ary < 10) { //2-9进制while (1) {temp = num % ary; //进制转换number_stack.push(temp + '0'); //压栈,这里需要加上 '0' 因为栈定义为char类型num = num / ary; //计算剩余数if (num == 0)break;}} else if (ary == 10) //10进制cout << num << endl;else if (ary > 10 && ary < 36) { //11-36进制while (1) {temp = num % ary ; //进制转换if(temp > 9)temp = temp - 10 + 'a'; //设置为a 开始,输出为aelsetemp = temp + '0'; //这里转换为字符number_stack.push(temp); //压栈num = num / ary; //计算剩余数if (num == 0)break;}}while (!number_stack.empty()) {cout << number_stack.top(); //得到栈顶元素number_stack.pop(); //出栈}}
}
/*** 任意进制转换为10进制* @param ary 目前的进制数* @param num 要转换的数* @return*/
long long int All_to_Dec(int ary, string num) {long long int result = 0;long long int temp = 0, i = 0;if (ary > 36 || ary < 0)return 0;for (int j = 0; j < num.size(); ++j) {if (num[j] >= '0' && num[j] <= '9') {temp = (num[j] - '0') * pow(ary, num.size() - 1 - j); //计算这个字母对应的数字} else if (num[j] >= 'A' && num[j] <= 'Z') {temp = (num[j] - 'A' + 10) * pow(ary, num.size() - 1 - j); //计算这个字母对应的数字}result += temp;}return result;
}
/*** 将M进制的数X转换为N进制的数输出。(2<=M,N<=36)*/
int main() {int M = 0, N = 0;string X = ""; //要转换的数cin >> M >> N; //获取初始进制数M和目标进制数Ncin >> X; //需要转换的数long long int dec_num = All_to_Dec(M, X); //M进制转换为十进制数,这里需要用long long才能存下Dec_To_All(N, dec_num); //十进制转换为N进制return 0;
}
注意:
- 使用了栈Stack进行存储,一定要将压入的元素都转换为栈定义的类型
- 记住
‘A’ = 65
‘a’=97
'0' = 48
这些常用的ASCII码对应的值
End
本文标签: 进制转换36进制
版权声明:本文标题:进制转换——36进制 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1688025263a170197.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论