数制转换

来源:互联网 发布:c语言main函数 编辑:程序博客网 时间:2024/05/09 14:52

问题描述:

描述
求任意两个不同进制非负整数的转换(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;}
运行结果:

心得体会:

做题要有耐心,相信自己!

1 0
原创粉丝点击