B、B、B进制星球!

版权声明:转载请注明出处 https://blog.csdn.net/qq_42692421/article/details/83187670

本题选自洛谷训练场。。。传送门,点击!

First.

做题前的注意事项:

  1. 首先,因为作为一个进制转换的题型,需要一些辅助工具(在线进制转换器);
  2. 再者,对于高精度加法,详情请见:传送门
  3. 最后,在做本题前最好熟悉十六进制的运算;

Second.

上代码!

#include <iostream>
using namespace std;
int Base_n;//n进制。。。。 
string _a,_b;
int lna,lnb,lnx;
int a[2010],b[2010];//保证不会超出限度 
int main()
{
	ios::sync_with_stdio(false);//关闭 
	cin>>Base_n;
	cin>>_a>>_b;
	lna=_a.size();
	lnb=_b.size();
	lnx=max(lna,lnb);//找到最长的字符串长度,以便相加 
	//接下来的操作为将字符元素转化为数字 
	for(int i=0;i<lna;i++)
	{
		if('0'<=_a[lna-i-1]&&_a[lna-i-1]<='9')
			a[i]=_a[lna-i-1]-'0';
		else
			a[i]=_a[lna-i-1]-'A'+10;
	}
	for(int i=0;i<lnb;i++)
	{
		if('0'<=_b[lnb-i-1]&&_b[lnb-i-1]<='9')
			b[i]=_b[lnb-i-1]-'0';
		else
			b[i]=_b[lnb-i-1]-'A'+10;
	}
	//一个循环解决尽量多的问题! 
	for(int i=0;i<=lnx+9;i++)//相加并进位 
	{
		a[i]+=b[i];
		a[i+1]+=a[i]/Base_n;
		a[i]%=Base_n;
	}
	if(a[lnx]!=0)	cout<<a[lnx];//是否存在最高位进位 
	for(int i=lnx-1;i>=0;i--)
	{
		if(a[i]>=10)
			cout<<char('A'+a[i]-10);//注意输出这时应为char类型 
		else
			cout<<a[i];
	}
	cout<<endl;//好习惯。。。。。 
	return 0;
}
/*
16
A1
B2

16
A1
BB

16
A1
A2
*/

P.S.:还送三组数据!!!


Third.
有意见请于评论中提出,一同进步。。。。


Fourth.

下次再见。。。。。

猜你喜欢

转载自blog.csdn.net/qq_42692421/article/details/83187670
B
a^b
A/B
A*B