进制转换

进制转换

1.k进制转化为10进制

1
2
3
4
5
6
7
ll k_to_ten(int a[],int len,int k){ //读入一个存储为k进制的数组a,返回一个10进制x
ll x = 0;
for(int i = 0 ;i < len ; i ++){
x = x*k + a[i]; //x = a[0]*k^n + a[1]*k*(n-1)...+a[len]
}
return x;
}

2.10进制转化为k进制

1
2
3
4
5
6
7
8
9
int ten_to_k(ll x,int a[],int k){ //读入一个10进制x,转化为k进制数组a,返回a的长度
int len = 0;
while(x){
a[len++] = x % k;
x /= k;
}
reverse(a,a+len);
return len;
}

3.例题_进制转换

进制转换 - 蓝桥云课 (lanqiao.cn)

  • 把这个k1进制的数转化为k2进制的数,需要10进制来过渡
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll k_to_ten(int a[],int len,int k){
ll ans = 0;
for(int i = 0 ; i < len ; i ++){
ans = ans*k + a[i];
}
return ans;
}

int ten_to_k(int a[],int k,ll x){
int len = 0;
while(x){
a[len++] = x%k;
x /= k;
}
reverse(a,a+len);
return len;
}

int t,k1,k2;
string s;
int num[1000],ans[1000];

int main(){
ios::sync_with_stdio(false);
cin>>t;
while(t--){
cin>>k1>>k2;
cin>>s;
int len = s.length();
for(int i = 0 ; i < len ; i ++){
if(s[i] >= '0' && s[i] <= '9') num[i] = int(s[i] - '0');
else if(s[i] >= 'A' && s[i] <= 'F') num[i] = int(s[i] - 'A' ) + 10;
}
ll temp = k_to_ten(num,len,k1);
int ans_len = ten_to_k(ans,k2,temp);
for(int i = 0 ; i < ans_len ; i ++){
if(ans[i] >= 0 && ans[i] <= 9) cout<<ans[i];
else cout<<char( int('A') + ans[i] - 10);
}
cout<<endl;
}
}

4.例题_Alice和Bob的爱恨情仇

  • 博弈论+进制转换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll k_to_ten(int a[],int len,int k){
ll ans = 0;
for(int i = 0 ; i < len ; i ++){
ans = ans*k + a[i];
}
return ans;
}

int ten_to_k(int a[],int k,ll x){
int len = 0;
while(x){
a[len++] = x%k;
x /= k;
}
reverse(a,a+len);
return len;
}


int n,k;
int GET[100000];
int ans;

int main(void){
ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
cin>>n>>k;
if(k == 1){
while(n--){
int temp;cin>>temp;
ans += temp;
if(ans % 2 == 0) cout<<"Bob";
else cout<<"Alice";
return 0;
}
}
while(n--){
ll num;
cin>>num;
int len = ten_to_k(GET,k,num);
for(int i = 0 ; i < len ; i ++){
ans += GET[i];
}
}
if(ans % 2 == 0) cout<<"Bob";
else cout<<"Alice";
}

进制转换
https://czwcugb.github.io/算法/未分类/进制转换/
作者
ChenZhiwei
发布于
2025年1月13日
许可协议