通项公式:
while(n!=0){
a[i]=n%d;
n=(n/d);
i++;
}
其中n为要转换的十进制的数。d为要转换的数制,如二进制为2.
#include<iostream>
using namespace std;
int main() {
int i,n,d,a[100];//n 为要转换的十进制数,d为要转为的数制
while(cin>>n>>d){
i=0;
while(n!=0){
a[i]=n%d;
n=(n/d);
i++;
}
while(i--) cout<<a[i];
cout<<endl;
}
return 0;
}
缺点:因为数组a存放的是数字,上述代码只能转换小于10的数制。在16进制下,其实当a[i]的值为11时,我们只要建立一个映射就可以了,11对应输出B。可以建立另一个数组,将数组a作为下标。
改进:通用的的进制的转换(16以内):
#include<iostream>
using namespace std;
int main() {
int i,n,d,k,a[100];//n 为要转换的十进制数,d为要转为的数制
char Hex[16] ;
for(i=0;i<10;i++)Hex[i]='0'+i;
for(i=10;i<16;i++)Hex[i]='A'+(i-10);
while(cin>>n>>d){
i=0;
while(n!=0){
a[i]=n%d;
n=(n/d);
i++;
}
while(i--){
k=a[i];
cout<<Hex[k];
}
cout<<endl;
}
return 0;
}