#include <iostream>
#include <vector>
using namespace std;
void stringToInt(string s,vector<int> &ve)
{
for(int i=0;i<s.size();i++)
{
int k=0;
if(s[i]>='A')
{
k=s[i]-'A'+10;
}else
{
k=s[i]-'0';
}
ve.push_back(k);
}
}
void change(vector<int> ve,vector<int> &result,int m,int n)
{
int i=0;
while(i<ve.size())// 当该数除为0时,即全部为0
{
int r=0;// 每次的余数
for(int j=i;j<ve.size();j++)
{
int t=m*r+ve[j];// 上一位的余数+该位上的数字
int div=t/n;// n进制
ve[j]=div;// 保存该位除法的商
r=t%n;// 该位的余数
}
// 一次除法计算完毕后
result.push_back(r);// 将该次取余值保存
while(ve[i]==0)i++;// 把前置0略去,全部为0时i增加到ve.size()即跳出循环
}
}
void output(vector<int> v)
{
for(int i=v.size()-1;i>=0;i--)
{
if(v[i]>=10)
{
char c=v[i]-10+'a';// 输出为小写
cout<<c;
}else
cout<<v[i];
}
cout<<endl;
}
void func()
{
int m,n;
while(cin>>m>>n)
{
string s;
cin>>s;
vector<int> ve;
stringToInt(s,ve);
vector<int> result;
change(ve,result,m,n);
output(result);
}
}
int main(int argc, char *argv[])
{
//printf("Hello, world\n");
func();
return 0;
}
除模取余
-
题目描述:
-
将M进制的数X转换为N进制的数输出。
-
输入:
-
输入的第一行包括两个整数:M和N(2<=M,N<=36)。
下面的一行输入一个数X,X是M进制的数,现在要求你将M进制的数X转换成N进制的数输出。
-
输出:
-
输出X的N进制表示的数。
-
样例输入:
-
16 10 F
-
样例输出:
-
15
-
提示:
-
输入时字母部分为大写,输出时为小写,并且有大数据。