蓝桥杯基础题::基础练习 十六进制转十进制

试题 基础练习 十六进制转十进制
  
资源限制
时间限制:1.0s   内存限制:512.0MB
问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535

解题思路

  1. 并不用太麻烦 ,十六进制直接转八进制。直接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;
} 
posted @ 2020-02-14 20:25  XingChenLiu  阅读(56)  评论(0)    收藏  举报