0
点赞
收藏
分享

微信扫一扫

蓝桥杯练习——Basic

毅会 2022-04-02 阅读 93
算法c++

文章目录


前言

蓝桥杯练习系统基础题。

一、十六进制转八进制

想复杂想到大数除法去了。。。可以先把十六进制转二进制,再二进制转八进制。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
map<char,int>num;
long  a[207];
string itos(ll x){
	string res;
	stringstream ss;
	ss<<x;
	ss>>res;
	return res;
}
string x_to_b(string s){
	string res="";
	int i;
	ll int_res=0;
	int len=s.size();
	for(i=0;i<=len-1;i++){
		//cout<<"this is "<<s[i]<<endl;
		string per;
		if(s[i]=='A')per="1010";
		else if(s[i]=='B')per="1011";
		else if(s[i]=='C')per="1100";
		else if(s[i]=='D')per="1101";
		else if(s[i]=='E')per="1110";
		else if(s[i]=='F')per="1111";
		else if(s[i]=='0')per="0000";
		else if(s[i]=='1')per="0001";
		else if(s[i]=='2')per="0010";
		else if(s[i]=='3')per="0011";
		else if(s[i]=='4')per="0100";
		else if(s[i]=='5')per="0101";
		else if(s[i]=='6')per="0110";
		else if(s[i]=='7')per="0111";
		else if(s[i]=='8')per="1000";
		else if(s[i]=='9')per="1001";
		res+=per;
	}
	return res;
}
string b_to_o(string ds){
	int i;
	string res="";
	int len=ds.size();
	int re=len%3;
	reverse(ds.begin(),ds.end());
	for(i=1;i<=len/3;i++){
		int l=3*(i-1);
		int r=l+2;
		int per=0;
		for(int j=l;j<=r;j++){
			int mi=j-l;
			if(ds[j]!='0')per+=pow(2,mi);
		}
		string per_s=itos(per);
		res+=per_s;
	}
	//RE
	int per=0;
	for(int j=len-re;j<=len-1;j++){
		int mi=j-(len-re);
		if(ds[j]!='0')per+=pow(2,mi);
	}
	string per_s=itos(per);
	res+=per_s;
	reverse(res.begin(),res.end());
	return res;
}
string clear_pre_0(string s){
	string res;
	int i=0;
	int len=s.size();
	while(1){
		if(s[i]=='0')i++;
		else break;
	}
	res=s.substr(i,len-i);
	return res;
}
int main(){
	int n;
	cin>>n;
	int i;
	for(i=1;i<=n;i++){
		string s;
		cin>>s;
		string b=x_to_b(s);
		//cout<<"b="<<b<<endl;
		string o=b_to_o(b);
		o=clear_pre_0(o);
		cout<<o<<endl;
		//cout<<"----------------------\n";
	}
	return 0;
} 

二、十进制转十六进制

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int>ans;
int main(){
	int a;
	scanf("%d",&a);
	while(1){
		int re;
		re=a%16;
		ans.push_back(re);
		a=a/16; 
		if(a==0)break;
	}
	int len=ans.size();
	int i;
	for(i=len-1;i>=0;i--){
		if(ans[i]>=0&&ans[i]<=9){
			cout<<ans[i];
		}
		else{
			if(ans[i]==10)cout<<'A';
			if(ans[i]==11)cout<<'B';
			if(ans[i]==12)cout<<'C';
			if(ans[i]==13)cout<<'D';
			if(ans[i]==14)cout<<'E';
			if(ans[i]==15)cout<<'F';
		}
	}
	cout<<endl;
	return 0;
} 

三、十六进制转十进制

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll  a[207];
string itos(ll x){
	string res;
	stringstream ss;
	ss<<x;
	ss>>res;
	return res;
}
string x_to_d(string s){
	string res="";
	ll i;
	ll sum=0;
	ll len=s.size(); 
	reverse(s.begin(),s.end());
	for(i=0;i<=len-1;i++){
		ll si,wi;
		if(s[i]>='0'&&s[i]<='9'){
			si=s[i]-'0';
		}
		else{
			if(s[i]=='A')si=10;
			else if(s[i]=='B')si=11;
			else if(s[i]=='C')si=12;
			else if(s[i]=='D')si=13;
			else if(s[i]=='E')si=14;
			else if(s[i]=='F')si=15;
		}
		wi=pow(16,i);
		sum+=wi*si;
	}
	res=itos(sum);
	return res;
}

int main(){
	string s;
	cin>>s;
	s=x_to_d(s);
	cout<<s<<endl; 
	return 0;
} 

总结

练练基础。

举报

相关推荐

蓝桥杯练习

蓝桥杯练习------基础练习

【蓝桥杯-跑步练习】

蓝桥杯练习016

蓝桥杯基础练习

蓝桥杯练习1176

蓝桥杯练习笔记(十八)

0 条评论