资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
#include<iostream>
#include<string>
using namespace std;
int main(){
/*输入要转换的数*/
string a;
cin>>a;
int len = a.length();
int c[100]={0};
long long ans = 0;//存放结果的变量,必须指定为long long才行
int count = 0;//表示幂的值
/*判断输入的值是否为0*/
if(a == "0"){
ans = 0;
}
else{
//将输入进来的数转进整数数组c中
for(int i =len-1;i >=0;i--){
if(a[i] == 'A'){
c[i] = 10;
}
else if(a[i] == 'B'){
c[i] = 11;
}
else if(a[i] == 'C'){
c[i] = 12;
}
else if(a[i] == 'D'){
c[i] = 13;
}
else if(a[i] == 'E'){
c[i] = 14;
}
else if(a[i] == 'F'){
c[i] = 15;
}
else if(a[i] == '0'){
c[i] = 0;
}
else if(a[i] == '1'){
c[i] = 1;
}
else if(a[i] == '2'){
c[i] = 2;
}
else if(a[i] == '3'){
c[i] = 3;
}
else if(a[i] == '4'){
c[i] = 4;
}else if(a[i] == '5'){
c[i] = 5;
}
else if(a[i] == '6'){
c[i] = 6;
}
else if(a[i] == '7'){
c[i] = 7;
}
else if(a[i] == '8'){
c[i] = 8;
}
else if(a[i] == '9'){
c[i] = 9;
}
}
/*进行计算*/
for(int j = len-1;j >= 0;j--){
long long temp = 0;
temp = c[j];
for(int k = count;k > 0;k--){
temp *= 16;
}
ans += temp;
count++;
}
}
/*输出答案*/
cout<<ans;
return 0;
}
考点:进制转换 字符处理 判断
注意事项:
①需要处理输入为0的情况
②此题需理清计算的思路
③用于存放结果的变量必须得long long,不然遇到较大得测试案例时会出问题