题解 | #进制转换#
进制转换
https://www.nowcoder.com/practice/8f3df50d2b9043208c5eed283d1d4da6
#include <iostream>
#include<string>
using namespace std;
//写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。数据范围:保证结果在1≤n≤2^31−1
int fun1(int n) //16的n次方
{;
if (n == 0)
{
return 1;
}
return 16 * fun1(n-1);
}
int main()
{
string str;
cin >> str;
int len = str.length();
len -= 2;
//先把他0X分离出来
str = str.substr(2,len);
int s = 0; //表示10进制的数据
string strdata;//用来储存数据
while (len != 0)
{
strdata = str.substr(0,1); //截取最高位 16的len-1次方
//A 65 B 66 C 67 D 68 E69 F70
//10 11 12 13 14 15
str = str.substr(1, len); //将最高位去除
len--;
//switch中的参数有要求 字符 数字或者是byte或者是枚举类型 不能是string double等类型
switch (*strdata.data()) //strdata.data()是const char*类型
{
case 'A':
s += 10 * fun1(len);
break;
case 'B':
s += 11 * fun1(len);
break;
case 'C':
s += 12 * fun1(len);
break;
case 'D':
s += 13 * fun1(len);
break;
case 'E':
s += 14 * fun1(len);
break;
case 'F':
s += 15 * fun1(len);
break;
default:
s += stoi(strdata.data())*fun1(len);
break;
}
}
cout << s << endl;
system("pause");
return 0;
}
查看12道真题和解析