问题描述:
描述求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0,1,...,9,A,B,...,F)。输入输入只有一行,包含三个整数a,n,b。a表示其后的n 是a进制整数,b表示欲将a进制整数n转换成b进制整数。a,b是十进制整数,2 =< a,b <= 16。输出输出包含一行,该行有一个整数为转换后的b进制数。输出时字母符号全部用大写表示,即(0,1,...,9,A,B,...,F)。样例输入15 Aab3 7样例输出210306
解题思路:
本题思路较为简单,将a进制数n先转化为十进制数,然后在转化为b进制数。
解题细节:
注意题目要求,输出的字母符全部大写,同时运用公式:n=(n/d)*d+n%d;将十进制数转为任意进制数。
代码:
#include<bits/stdc++.h>using namespace std;int main(){ int a,b,d[100]; char c[40]; while(cin>>a>>c>>b) { int len=strlen(c); int i,j,k,m,n,sum=0,x; for(i=len-1;i>=0;i--) { x=0; m=len-i-1; if(c[i]>='0'&&c[i]<='9') x=c[i]-'0'; else if(c[i]>='a'&&c[i]<='z') x=c[i]-'a'+10; else if(c[i]>='A'&&c[i]<='Z') x=c[i]-'A'+10; sum+=x*pow(a,m); } i=0; do{ d[++i]=sum%b; sum=sum/b; }while(sum!=0); for(j=i;j>=1;j--) if(d[j]>=10) cout<<(char)(d[j]-10+'A');//如果大于等于10,将数字转化为大写字母符 else cout<<d[j]; } return 0;}运行结果:
心得体会:
做题要有耐心,相信自己!
新闻热点
疑难解答