B、B、B进制星球!

这篇博客源自洛谷训练场的一道题目,涉及进制转换和高精度加法。作者建议在解题前使用在线进制转换器,并熟悉十六进制运算。文中提供代码实现,并附带三组测试数据供读者练习。
摘要由CSDN通过智能技术生成

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

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.

下次再见。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值