四进制加法(运算符重载)

题目描述

定义一个四进制的类,重定义“+”号实现四进制数的累加。

输入

第一行输入所需要的四进制数的个数

第二行开始,依次输入四进制数

输出

所有输入四进制数累加的和

输入样例1 

3
13
2
21

输出样例1

102

思路分析

题目不长,但是题目很难,我觉得。

对于四进制转换,我看到的和我自己想到的,大概有三种方法,最普通最容易想到的就是像做大整数相加那样把它们整成字符串,然后一位一位相加,不过基数不是十而是四,但是,我觉得比较麻烦,因为得考虑到循环进位之类的问题。

比较难想到的就是我看到有大佬直接先当成十进制直接相加,然后逐位取出来和4比较大小,但我觉得这样仅仅是针对四进制有效而已,因为直接相加不会产生进位,最大也就是3+3,不会超过十,但是六进制及以上这种方法就不行了。

于是我用这种方法,直接进制转换,先变十进制数,大家相加完了再从十进制数变四进制数。

四进制变十进制很方便,直接从首位开始循环,每次乘4就可以了。

但是十进制变四进制就比较烧脑。

因为涉及字符串的插入问题,用char肯定麻烦,因为不知道有多少位,所以必须用string,先创建一个空的string类,然后每次在开头插入,因为进制转换规则是这样的,像C语言、计算机导论、计算机系统、数字电路之类的课程都有教进制转换。

AC代码

#include"iostream"
#include"string"
#include"cmath"
using namespace std;
class four
{
	string number;
	int decimal=0,i;
	public:
		four(string number):number(number){turndecimal();}
		void turndecimal()
		{
			for(i=0;number[i];i++)
			decimal=decimal*4+number[i]-'0';
		}
		void turnfour(int deci)
		{
			do
			{
				char code=deci%4+'0';
				number.insert(number.begin(),code);
				deci/=4;
			}while(deci);
		}
		four operator + (four & a)
		{
			four c("");
			c.turnfour(a.decimal+decimal);
			c.turndecimal();
			return c;
		}
		void show()
		{
			cout<<number;
		}
};
int main()
{
    int t;
    string num="";
    four sum(num);
    cin>>t;
    while(t--)
    {
		cin>>num;
		four number(num);
		sum=sum+number;
	}
	sum.show();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@YeMaolin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值