题目描述
数学课又开始了,第一个问题是老师现在在教大家如何转化进制,例如10进制数转化为m进制数,就是除以m取余求逆,例如(10)10=(1010)2,十进制的10转化为二进制是1010,现在想老师问了小科一个十进制数字,将这个十进制数变成其他进制,然后将转换后的每个数码重新组合问能够重新形成的最大数是多少?小科思考了半天还是不会请你直接来帮助他吧
输入格式
输入只有一行两个正整数,第一个表示待转化的十进制数,第二个表示转化为的进制m;
输出格式
输出只有一个,表示转化后的的m(2<=m<=16)进制下的最大能够从新组合的数;
输入输出样例
输入样例1:
10 2
输出样例1:
1100
输入样例2:
108 16
输出样例2:
C6
说明
样例说明:
样例1:十进制的整数10 转成2进制是1010,重新组合成最大的数是1100
样例2:十进制的整数108 转成16进制是6C,重新组合成最大的数是C6
【耗时限制】1000ms 【内存限制】128MB
AC代码
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
using namespace std;
bool cmp(const char &x,const char &y){
return x>y;
}
string t(int x,int n){
string s;
char c;
while(n){
if(n%x<=9){
c=n%x+'0';
}else{
c=n%x+('A'-10);
}
s.push_back(c);
n/=x;
}
reverse(s.begin(),s.end());
return s;
}
int main() {
int n,x;
cin>>n>>x;
string s1;
s1=t(x,n);
sort(s1.begin(),s1.end(),cmp);
cout<<s1;
return 0;
}