大整数加法

本文介绍了一个C++类的实现,用于简化大数运算。通过类成员变量和成员函数,实现大数的加法操作,并展示了如何通过迭代和递归的方法处理字符串形式的大数。此外,还提供了长度获取和获取数值字符串的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以前看到别人的大数运算,一直都没有自己动手实践过,今天看到论坛上有人提出类似的简化了的问题,顺手写了一个,感觉还行,记录下来,以供日后参考。


类:

#pragma once

#include <string>

class CInteger
{
public:
	CInteger(void) { _number = "0"; _carry = '0'; }
	CInteger(std::string& integer) { _number = integer; _carry = '0'; }
	CInteger(const char * integer) { _number = integer; _carry = '0'; }
	virtual ~CInteger(void){}

private:
	std::string			_number;
	char				_carry;
	inline char			decimal_add(char _left, char _right)
	{
		char _result = _left + _right - '0';
		if(_result > '9')
		{
			_result -= 10;
			_carry += 1;
		}
		return _result;
	}

public:
	void				decimal_add()
	{
		std::string::reverse_iterator itr_number = _number.rbegin();
		*itr_number = decimal_add(*itr_number, '1');
		while(_carry != '0')
		{
			char tmp_carry = _carry;
			_carry = '0';
			itr_number++;
			if(_number.rend() == itr_number)
			{
				_number.insert(_number.begin(), '0');
				itr_number = _number.rend() - 1;
			}
			*itr_number = decimal_add(*itr_number, tmp_carry);
		}
	}
	inline unsigned int length(){ return _number.size(); }
	inline std::string	number(){ return _number; }
};

测试代码:

// Testor.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "Integer.h"
#include <iostream>

int _tmain(int argc, _TCHAR* argv[])
{
	CInteger integer("1");
	unsigned int n = 0;
	std::cout << "n =";
	std::cin >> n ;
	for(int i = 0; integer.length() <= n; i++)
	{
		std::cout << integer.number() << std::endl;
		integer.decimal_add();
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值