AcWing 124. 数的进制转换
原题链接
简单
作者:
y差c
,
2024-04-08 13:26:22
,
所有人可见
,
阅读 95
a进制转为b进制的模板,num数组根据题目变化而变化
vector<int> num,res;
for(auto c:s)
{
if(c>='0'&&c<='9') num.push_back(c-'0');
else if(c>='A'&&c<='Z') num.push_back(c-'A'+10);
else if(c>='a'&&c<='z') num.push_back(c-'a'+36);
}
reverse(num.begin(),num.end());
while(num.size())
{
int t=0;
for(int i=num.size()-1;i>=0;i--)
{
num[i]+=t*a;
t=num[i]%b;
num[i]/=b;
}
res.push_back(t);
while(num.size() && num.back()==0) num.pop_back();
}
reverse(res.begin(),res.end());
string ans;
for(auto x:res)//遍历res数组,将每一个数字换算成对应的字符
{
if(x<=9) ans+=char(x+'0');//0-9 十进制
else if(x<=35) ans+=char(x+'A'-10);//这个范围内,将这个数字转化为字符
else ans+=char(x+'a'-36);
}
完整代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int T;
cin>>T;
int a,b;
string s;
while(T--)
{
cin>>a>>b>>s;
vector<int> num,res;
for(auto c:s)
{
if(c>='0'&&c<='9') num.push_back(c-'0');
else if(c>='A'&&c<='Z') num.push_back(c-'A'+10);
else if(c>='a'&&c<='z') num.push_back(c-'a'+36);
}
reverse(num.begin(),num.end());
while(num.size())
{
int t=0;
for(int i=num.size()-1;i>=0;i--)
{
num[i]+=t*a;
t=num[i]%b;
num[i]/=b;
}
res.push_back(t);
while(num.size() && num.back()==0) num.pop_back();
}
reverse(res.begin(),res.end());
string ans;
for(auto x:res)//遍历res数组,将每一个数字换算成对应的字符
{
if(x<=9) ans+=char(x+'0');//0-9 十进制
else if(x<=35) ans+=char(x+'A'-10);//这个范围内,将这个数字转化为字符
else ans+=char(x+'a'-36);
}
cout<<a<<' '<<s<<endl;
cout<<b<<' '<<ans<<endl;
cout<<endl;
}
return 0;
}