将r进制转换成十进制数ans
ll change1(int r,string s)//r进制数转十进制数
{
ll len=0,ans=0;
while(s.length()!=len)
{
ans=ans*r;
if(s[len]>='A'&&s[len]<='Z')
ans=ans+s[len]-'A'+10;
else
ans=ans+s[len]-'0';
len++;
}
return ans;
}
将十进制数ans转化成k进制数
void change2(int k,ll ans)//将十进制数ans转化成k进制数
{
stack<int>p;
if(ans==0)//特判0
p.push(ans);
while(ans)//ans除以基数,然后倒着取余数,用栈恰好可以实现
{
p.push(ans%k);
ans=ans/k;
}
while(!p.empty())
{
switch(p.top())
{
case 10:cout<<'A';break;
case 11:cout<<'B';break;
case 12:cout<<'C';break;
case 13:cout<<'D';break;
case 14:cout<<'E';break;
case 15:cout<<'F';break;//这些都是为了能转化为十六进制。还可以继续增加
default:cout<<p.top();break;
}
p.pop();
}
cout<<endl;
}
将r进制数s转化成k进制数`
void change3(int r,string s,int k)//将r进制数s转化成k进制数
{
ll temp=change1(r,s);
change2(k,temp);
}
主函数
#include<iostream>
#include<algorithm>
#include<math.h>
#include<stack>
#define ll long long
#define M 0x3f3f3f3f3f
using namespace std;
int main()
{
int r,k;
string s;
cin>>r>>k>>s;//将r进制数s转化成k进制数
change3(r,s,k);
return 0;
}
作 者:Woft6c
出 处:https://blog.csdn.net/Woft6c/article/details/105189378
关于作者:码龄173天的小学生
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。