36进制
对于16进制,我们使用字母A-F来表示10及以上的数字。
如法炮制,一直用到字母Z,就可以表示36进制。
36进制中,A表示10,Z表示35,AA表示370
你能算出 MANY 表示的数字用10进制表示是多少吗?
请提交一个整数,不要填写任何多余的内容(比如,说明文字)
结果:1040254
思路:A表示10,Z表示35,我们需要将英文字母和数字对应起来,显然我们需要用到map来存储键值对
将任意进制数转换成十进制,是同一个方法,公式如下:number(10进制)=原数第一位*原数进制的0次方+原数第二位*原数进制的1次方+原数第三位*原数进制的2次方+...+原数第n位*原数进制的n-1次方
具体思路如下:
1.申明一个map<string,int>,用英文字母索引数字,将“键值对1”-1,...,“9”-9,“A”-10,..."Z"-35存入map中
声明一个字符串,用来存储需要转换的36进制数
声明一个int型变量sum,初始化为0,,用来累加,
声明一个int 型变量length,用来存储36进制数字的长度
2.用string的strsub方法截取s的倒数第一个字母,用map通过字母找到该字母对应的数字,sum=sum+map[string.strsub(length-1,1)]*pow(36,length-1);
3.用string的strsub方法截取s的倒数第二个字母,用map通过字母找到该字母对应的数字,sum=sum+map[string.strsub(length-2,1)]*pow(36,length-2);
.................此处省略n-3步...............
n.用string的strsub方法截取s的第一个字母,用map通过字母找到该字母对应的数字,sum=sum+map[string.strsub(0,1)]*pow(36,0);
最后输出结果即可
代码如下:
#include<iostream>
#include<math.h>
#include<map>
using namespace std;
int main() {
map<string,int> mapNumber;
mapNumber.insert(pair<string,int>("1",1));
mapNumber.insert(pair<string,int>("2",2));
mapNumber.insert(pair<string,int>("3",3));
mapNumber.insert(pair<string,int>("4",4));
mapNumber.insert(pair<string,int>("5",5));
mapNumber.insert(pair<string,int>("6",6));
mapNumber.insert(pair<string,int>("7",7));
mapNumber.insert(pair<string,int>("8",8));
mapNumber.insert(pair<string,int>("9",9));
mapNumber.insert(pair<string,int>("A",10));
mapNumber.insert(pair<string,int>("B",11));
mapNumber.insert(pair<string,int>("C",12));
mapNumber.insert(pair<string,int>("D",13));
mapNumber.insert(pair<string,int>("E",14));
mapNumber.insert(pair<string,int>("F",15));
mapNumber.insert(pair<string,int>("J",16));
mapNumber.insert(pair<string,int>("H",17));
mapNumber.insert(pair<string,int>("I",18));
mapNumber.insert(pair<string,int>("G",19));
mapNumber.insert(pair<string,int>("K",20));
mapNumber.insert(pair<string,int>("L",21));
mapNumber.insert(pair<string,int>("M",22));
mapNumber.insert(pair<string,int>("N",23));
mapNumber.insert(pair<string,int>("O",24));
mapNumber.insert(pair<string,int>("P",25));
mapNumber.insert(pair<string,int>("Q",26));
mapNumber.insert(pair<string,int>("R",27));
mapNumber.insert(pair<string,int>("S",28));
mapNumber.insert(pair<string,int>("T",29));
mapNumber.insert(pair<string,int>("U",30));
mapNumber.insert(pair<string,int>("V",31));
mapNumber.insert(pair<string,int>("W",32));
mapNumber.insert(pair<string,int>("X",33));
mapNumber.insert(pair<string,int>("Y",34));
mapNumber.insert(pair<string,int>("Z",35));
string s;
s="MANY";
int length=s.size();
int sum=0;
for(int i=0; i<length; i++) {
sum=sum+mapNumber[s.substr(i,1)]*pow(36,length-i-1);
}
cout<<sum<<endl;
return 0;
}
感谢小哥哥,小姐姐看到了这里,Thanks♪(・ω・)ノ
本文介绍了一种将36进制数字转换为10进制的方法,并通过具体的例子进行了演示。通过创建映射表并运用数学公式完成了转换。
4081

被折叠的 条评论
为什么被折叠?



