这个题目就是让我们实现进制的转换。
我只会很简单的把他从一个别的进制转化成10进制,然后再继续转化成目标进制。
#include<iostream> #include<cstdio> #include<map> #include<cmath> using namespace std; long long a,b,shu,hh,e[100]; string s,jg; string sz=0123456789ABCDEF;//这是最后用来转化输出的,我不想把10以内和以外的数特判,所以写了个这东西。 map<char,int>mp; int main() { cin>>a; cin>>s; cin>>b; mp['A']=10;//转化,表示‘a'的值是10; mp['B']=11; mp['C']=12; mp['D']=13; mp['E']=14; mp['F']=15; for(int i=0;i<s.length();i++) { if(s[i]-'0'>=0&&s[i]-'0'<=9)//如果不是10或以外的数,直接-’0‘,然后计算。 { shu+=(s[i]-'0')*pow(a,s.length()-i-1); }else//是10或以外的数就看看它对应的是哪个。 { shu+=mp[s[i]]*pow(a,s.length()-i-1); } } while(shu!=0)//转化成目标进制的数。 { e[hh]=shu%b; hh++; shu/=b; } for(int i=hh-1;i>=0;i--)由于是从第到高转化的,所以要反过来输出。 { cout<<sz[e[i]]; } return 0; }
总的来说,这个题只要知道字符串的操作和如何转化就非常好做。