1.十进制转任何进制
#include<iostream>
#define int unsigned long long
using namespace std;
signed main(){
int s,pre=1,m,a[1000];
cin>>s>>m;
while(s!=0){
a[++pre]=s%m;
s/=m;
}
for(int i=pre;i>=2;i--){
if(a[i]<10)cout<<a[i];
else cout<<(char)(a[i]-10+'A');
}
return 0;
}
2.任何进制转十进制
#include<iostream>
#include<string>
using namespace std;
int n,m,s,a[100];
string z;
int main(){
cin>>n>>z;
int size=z.size(),pow=1,pre=0;
for(int i=size-1;i>=0;i--){
int r;//r为位数
if(z[i]<='9'&&z[i]>='0')r=z[i]-'0';
else r=z[i]-'A'+10;
s+=r*pow;//位数乘以位权,然后累加
pow*=n;//计算下一位的位权
}
cout<<s;
return 0;
}
3.任何进制转任何进制
#include<iostream>
#include<string>
using namespace std;
int n,m,s,a[100];
string z;
int main(){
cin>>n>>z>>m;
int size=z.size(),pow=1,pre=0;
for(int i=size-1;i>=0;i--){
int r;//r为位数
if(z[i]<='9'&&z[i]>='0')r=z[i]-'0';
else r=z[i]-'A'+10;
s+=r*pow;//位数乘以位权,然后累加
pow*=n;//计算下一位的位权
}
while(s!=0){
a[++pre]=s%m;
s/=m;
}
for(int i=pre;i>=1;i--){
if(a[i]<10)cout<<a[i];
else cout<<(char)a[i]-'A'+10;
}
return 0;
}
备注,程序只能处理小于等于32进制的数,不过用于应对一些简单的比赛还是可以的