十进制数转化为k进制数:
不断除k直至商为0,余数按照倒序输出
k进制转化为十进制数:
从右往左当前数乘以k次幂++(幂从0开始)并求和


十六进制转化为10进制
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
int main()
{
ll a[9];
string s="2021ABCD";
//字符用''
//字符串用""
for(int i=0;i<s.length();i++)
{
if(s[i]>='0'&&s[i]<='9') a[i+1]=s[i]-'0';
else a[i+1]=s[i]-'A'+10;//这里是-'A'
}
ll x=0;
for(int i=1;i<=s.length();i++)
{
x=x*16+a[i];
}
cout<<x;
return 0;
}
N进制转化为M进制
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int a[1000];
char cb[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void f()//n——>m
{
int n,m;cin>>n>>m;
string s;cin>>s; //这里用的
s='$'+s;//方便处理下标
for(int i=1;i<=s.length();i++)
{
if(s[i]>='0'&&s[i]<='9') a[i+1]=s[i]-'0';
else a[i+1]=s[i]-'A'+10;
}//将字符串处理
//从n进制转化成十进制
ll x=0;
for(int i=1;i<=s.length();i++)
{
x=x*n+a[i];
}
//从十进制转化成m进制
string ans;
while(x)
{
ans+=cb[x%m];
x/=m;
}
reverse(ans.begin(),ans.end());
cout<<ans<<endl;
}
int main()
{
int t;cin>>t;
while(t--)
{
f();
}
return 0;
}
添加一个辅助符号后注意下标的问题

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int a[1000];
char cb[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void f()//n——>m
{
int n,m;cin>>n>>m;
string s;cin>>s;
s='$'+s;
for(int i=1;i<s.length();i++)//两个循环完全一致
{
if(s[i]>='0'&&s[i]<='9') a[i]=s[i]-'0';//a[i]、s[i]相同位置输入
else a[i]=s[i]-'A'+10;
}//将字符串处理
//从n进制转化成十进制
ll x=0;
for(int i=1;i<s.length();i++)
{
x=x*n+a[i];
}
//从十进制转化成m进制
string ans;
while(x)
{
ans+=cb[x%m];
x/=m;
}
reverse(ans.begin(),ans.end());
cout<<ans<<endl;
}
int main()
{
int t;cin>>t;
while(t--)
{
f();
}
return 0;
}


被折叠的 条评论
为什么被折叠?



