首页 > 代码库 > 01:数制转换
01:数制转换
01:数制转换
- 查看
- 提交
- 统计
- 提问
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
求任意两个不同进制非负整数的转换(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
- 来源
- 2005~2006医学部计算概论期末考试
1 #include<iostream> 2 #include<cstdio> 3 #include<cmath> 4 #include<cstring> 5 using namespace std; 6 char a[10001]; 7 int b[10001]; 8 int now; 9 int tot;10 int n;//未被转化的进制 11 int m;//需要转换的进制 12 int da[10001];13 char w[20]={‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘};14 int main()15 {16 cin>>n;17 scanf("%s",&a);18 19 cin>>m;20 int l=strlen(a);21 if(a[0]==‘0‘&&l==1)22 {23 cout<<"0";24 return 0;25 }26 for(int i=0;i<l;i++)27 {28 if(a[i]>=97&&a[i]<=122)29 {30 a[i]=a[i]-32;31 }32 if(a[i]>=49&&a[i]<=57)33 {34 b[i]=a[i]-48;35 }36 else if(a[i]>=65&&a[i]<=90)37 {38 b[i]=a[i]-55;39 }40 }41 int ans=0;42 int now=0;43 for(int i=l-1;i>=0;i--)44 {45 ans=ans+b[i]*(pow(n,now));46 now++;47 }48 int now2=1;49 while(ans!=0)50 {51 int r=ans%m;52 b[now2]=r;53 ans=ans/m;54 now2++;55 }56 for(int i=now2-1;i>=1;i--)57 {58 if(b[i]<10)59 cout<<b[i];60 else 61 {62 int k=b[i]-10;63 cout<<w[k];64 }65 }66 /*for(int i=now2;i>=0;i--)67 cout<<da[i];*/68 return 0;69 }
要注意考虑a是0的情况
01:数制转换
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。