题目描述
已知一个 nn 进制数,将其转为 mm 进制,请你编程完成这个任务。
输入格式
共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16)n(2≤n≤16),第二行是一个nn进制数,若n>10n>10则用大写字母A-FA−F表示数码10-1510−15,并且该nn进制数对应的十进制的值不超过10000000001000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)m(2≤m≤16)。
输出格式
一个正整数,表示转换之后的mm进制数。
输入输出样例
输入 #116 FF 2输出 #1
11111111
思路:
依然是熟悉的题目说啥你就干啥就可以做出来的题,只需要熟悉一下进制怎么互相转化即可
但是一定要记得输出的时候可不一定只有10或2进制,也是可以转16进制的!这是我第一次代码
#include<iostream> #include<cmath> using namespace std; string s; int n,m,sum; int a[100000]; int main() { cin>>n>>s>>m; //进制转换为10进制 for(int i=0;i<=s.length()-1;i++){ if(s[i]>'9'){ if(s[i]=='A')sum+=10*pow(n,s.length()-i-1); else if(s[i]=='B')sum+=11*pow(n,s.length()-1-i); else if(s[i]=='C')sum+=12*pow(n,s.length()-i-1); else if(s[i]=='D')sum+=13*pow(n,s.length()-i-1); else if(s[i]=='E')sum+=14*pow(n,s.length()-i-1); else if(s[i]=='F')sum+=15*pow(n,s.length()-i-1); } else sum+=(s[i]-'0')*pow(n,s.length()-i-1); } if(m==10){ cout<<sum; return 0; }else{ int i=0; while(sum){ a[i++]=sum%m; sum/=m; } for(int j=i-1;j>=0;j--){ cout<<a[j]; } } return 0; }
我一看,我趣,测试点红了俩,下载下来一看,居然把这个数字转回16进制了,所以我改了改代码(下面这个代码有注释)
#include<iostream> #include<cmath> using namespace std; string s; int n,m,sum; int a[100000]; int main() { cin>>n>>s>>m; //进制转换为10进制 for(int i=0; i<=s.length()-1; i++) { //如果当前这个字符比字符9的ASCLL码还大,因为题目保证除了0-9,A-F之外不会有别的东西出现,所以可以这么判断 //因为A的ASCLL码比9的大 if(s[i]>'9') { //然后一一对照加进sum里 if(s[i]=='A')sum+=10*pow(n,s.length()-i-1); else if(s[i]=='B')sum+=11*pow(n,s.length()-1-i); else if(s[i]=='C')sum+=12*pow(n,s.length()-i-1); else if(s[i]=='D')sum+=13*pow(n,s.length()-i-1); else if(s[i]=='E')sum+=14*pow(n,s.length()-i-1); else if(s[i]=='F')sum+=15*pow(n,s.length()-i-1); } else//如果小于字符9的码,那就是正常数字,转化为int就可以了,方法是减去'0' sum+=(s[i]-'0')*pow(n,s.length()-i-1); } if(m==10) {//如果要转化为10进制那就不用算了,直接输出sum然后结束就行 cout<<sum; return 0; } else { //把数字存进数组里,需要注意是倒着存的,假设sum是11,二进制就是1011,a数组里就是1101 int i=0; while(sum) { a[i++]=sum%m; sum/=m; } //从后往前输出,因为他是倒着存的 for(int j=i-1; j>=0; j--) { if(a[j]>=10) { //如果当前数字比10还大说明他肯定是一个字母 //转换为字母然后输出这个字母 char ss='A'+(a[j]-10); cout<<ss; } else {//如果比10小那就是数字了,直接输出 cout<<a[j]; } } } return 0; }
标签:10,转换,数字,pow,sum,else,length,T258192,进制 From: https://www.cnblogs.com/Ghost1GM/p/16748730.html