题目描述:
求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。 不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。
算法思想:
1.将任意进制的数转化为十进制
2.再将十进制转为任意进制
算法实现:
#include<iostream> #include<string.h> using namespace std; void zhuanhua(int n,int a) {//十进制到任意进制 int i=0; int s[100]={0}; while(a!=0) { s[i]=a%n; a=a/n; i++; } for(int j=i-1;j>=0;j--) { cout<<s[j]; } cout<<endl; } void zhuanhua1(int a,char s[],int b) {//任意进制转化为十进制 int tmp=0;//tmp保存十进制值 int length=strlen(s); int c=1;//初始时不论是多少进制,最低位权重都是1(常识) for(int i=length-1;i>=0;i--) { int x;//取得当前位上的数字 if(s[i]>='0'&&s[i]<='9') { x=s[i]-'0'; } else if(s[i]>='a'&&s[i]<='z') { x=s[i]-'a'+10; } else { x=s[i]-'A'+10; } tmp=tmp+x*c; c=c*a; } zhuanhua(b,tmp); } int main() { int a,b; char s[40]; while(cin>>a>>s>>b) { zhuanhua1(a,s,b); } return 0; } |