如果你不会位运算
查看原帖
如果你不会位运算
1063799
chenshenqi楼主2024/4/18 21:39
#include <bits/stdc++.h>
using namespace std;
string turn_string(long long a){
	if (a<10){
		string ans;
		char m=a+'0';
		ans+=m;
		return ans;
	}else{
		string ans;
		char m=a-10+'A';
		ans+=m;
		return ans;
	}
	return "0";
}
long long twostringtointeger(string a){
	int ans=0;
	for (int i=0; i<a.size(); i++){
		ans+=pow(2,(a.size()-1-i))*(a[i]=='1');
	}
	return ans;
}
string tentotwo(long long a){
	string s="";
	while (a!=0){
		s+=to_string(a%2);
		a/=2;
	}
	reverse(s.begin(),s.end());
	return s;
}

string tentosixteen(long long a){
    string s="";
    while (a!=0){
		s+=turn_string(a%16);
		a/=16;
	}
	if (s.size()==1) s+="0";
	reverse(s.begin(),s.end());
	return s;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    long long n;
    cin >> n;
    if (n==0){
		cout << "00";
		return 0;
	}
    string two=tentotwo(n);
	long long m=two.size()-two.size()/7*7;
	string p=two.substr(0,m);
	two=two.substr(m,two.size()/7*7);
	string ans[100]={};
	long long k=0;
    for (int i=0; i<two.size(); i+=7){
		string t=two.substr(i,7);
		reverse(t.begin(),t.end());
		t+="1";
		reverse(t.begin(),t.end());
		ans[k++]=tentosixteen(twostringtointeger(t));
	}
	while (k--){
		cout << ans[k] << ' ';
	}
	cout << tentosixteen(twostringtointeger(p));
	return 0;
}

2024/4/18 21:39
加载中...