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进制