⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exchangetype.cpp

📁 可进行大数的加减乘除、阶乘、三角函数、幂指数(指数只支持整数)的运算
💻 CPP
字号:
#include "ExchangeType.h"
#include "Arithmetic.h"

int ExchangeType::OriginSysteam = 10;
int ExchangeType::NewSysteam = 16;

/*******************************************************\
函数: ExchangeType构造函数
功能: 初始化
输入: 无
输出: 无
返回: 无
备注: 无
\*******************************************************/
ExchangeType::ExchangeType(char* data)
{
	this->m_NumLine = data;
}
ExchangeType::ExchangeType(std::string data)
{
	m_NumLine = data;
}
ExchangeType::ExchangeType(const ExchangeType& data)
{
	m_NumLine = data.GetData();
}

/*******************************************************\
函数: GetData
功能: 获取对象数据
输入: 无
输出: 无
返回: 数字
备注: 无
\*******************************************************/
std::string ExchangeType::GetData() const
{
	return m_NumLine;
}

/*******************************************************\
函数: Compare
功能: 十进制转其他进制时用于数据与0的大小比较
输入: 无
输出: 无
返回: 0 1
备注: 无
\*******************************************************/
bool ExchangeType::Compare(std::vector< long >& lvalue, int object)
{
	std::vector< long >::iterator it = lvalue.end() - 1;
	int i;
	for (i = lvalue.size() - 1;i >= 0;--it, --i)
	{
		if(*it > object)
			return 1;
		if(*it < object)
			return 0;
	}
	return 0;
}

/*******************************************************\
函数: Atol
功能: 十进制转其他进制时字符转long
输入: 无
输出: 无
返回: 数字
备注: StrToNum中调用此函数
\*******************************************************/
long ExchangeType::Atol(std::string c)
{
	int i, iten;
	long new_number;
	for (iten = 1, new_number = 0, i = 0;i < c.length();++i, iten *= 10)
		new_number += (c[c.length() - 1 - i] - '0') * iten;
	return new_number;
}

/*******************************************************\
函数: StrToNum
功能: 十进制转其他进制时字符转long
输入: 无
输出: 无
返回: 数字
备注: 调用Atol函数
\*******************************************************/
void ExchangeType::StrToNum(std::string datas, std::vector< long >& lvalue)
{
	long temp;
	int i;
	std::string c;
	for (i = datas.length() - 1;i >= 0; i -= 8)
	{
		if(i - 8 >= 0)
			c = datas.substr(i - 7, 8);
		else
			c = datas.substr(0, i+1);
		temp = Atol(c);
		lvalue.insert(lvalue.end(), temp);
	}
}

/*******************************************************\
函数: Exchang
功能: 十进制转其他进
输入: 无
输出: 无
返回: 数字
备注: 调用Atol函数
\*******************************************************/
std::string ExchangeType::Exchange(std::vector< long >& lvalue, int systeam)
{
	std::string types = "0123456789ABCDEF";
	std::string result = "";
	std::vector< long >::iterator it;
	int i;
	long temp, carry, t;
	while(Compare(lvalue, 0))
	{
		for (it = lvalue.end() - 1, carry = 0, i = lvalue.size() - 1; i >= 0;--i, --it)
		{
			temp = (*it + carry) / systeam;
			t = (*it + carry) % systeam;
			carry = t * (long)1e8;
			*it = temp;
		}
		result += types[t];
	}
	return result;
}

/*******************************************************\
函数: TenExType
功能: 十进制转其他进的主函数
输入: 无
输出: 无
返回: 转化结果
备注: 无
\*******************************************************/
std::string ExchangeType::TenExType(int systeam)
{
	std::vector< long > lvalue;
	std::string result;
	StrToNum(this->m_NumLine, lvalue);
	result = Exchange(lvalue, systeam);
	std::reverse(result.begin(), result.end());

	return result;
}

/*******************************************************\
函数: OtherExchange
功能: 其他进制转化成十进制
输入: 无
输出: 无
返回: 转化结果
备注: 利用了类Arithmetic的大数计算
\*******************************************************/
std::string ExchangeType::OtherExchange(int systeam)
{
	std::string result = "";
	char numbers[6][3] = {"10", "11", "12", "13", "14", "15"};
	char memory[4];
	sprintf(memory, "%d", systeam);
	Arithmetic t = memory;
	Arithmetic sys = "1", sum = "0";
	for (long i = m_NumLine.length()-1;i >= 0;--i)
	{
		if(m_NumLine[i] > 57)
		{
			Arithmetic t = numbers[m_NumLine[i] - 'A'];
			sum = sum + sys * t;
		}
		else
		{
			Arithmetic t = m_NumLine[i];
			sum = sum + sys * t;
		}
		sys = sys * t;
	}
	result = sum.GetData();

	return result;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -