试题 基础练习 十六进制转十进制
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
解题思路
- 并不用太麻烦 ,十六进制直接转八进制。直接lou代码!!!!
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int arr[100009];
string a;
int fun(char a){
return a>='0'&&a<='9'?a-'0':a-'A'+10;
}
int main(){
long long n;
cin>>n;
for(int ii=0;ii<n;ii++){
cin>>a;
int i=0;
int t=0;
for(;i<=(int)a.length()-3;i+=3){
int kk=0;
kk+=fun(a[(int)a.length()-i-1]);
kk+=fun(a[(int)a.length()-i-2])*16;
kk+=fun(a[(int)a.length()-i-3])*256;
arr[t]=kk;
t++;
}
if(i<=(int)a.length()-1){
int kk=0;
int k=1;
for(;i<=(int)a.length()-1;i++){
kk+=fun(a[(int)a.length()-i-1])*k;
k*=16;
}
arr[t]=kk;
t++;
}
int ty=t;
for(int i=t-1;i>=0;i--){
if(i!=t-1){
printf("%04o",arr[i]);
}else{
printf("%o",arr[i]);
}
}
cout<<endl;
}
return 0;
}