集训作业 洛谷P1143 进制转换

这个题目就是让我们实现进制的转换。

我只会很简单的把他从一个别的进制转化成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;
} 

总的来说,这个题只要知道字符串的操作和如何转化就非常好做。

posted @ 2020-05-08 21:32  lichangjian  阅读(173)  评论(0编辑  收藏  举报