C++实现任意进制的转换

1.定义头文件

#pragma once
#ifndef CCONVERT
#define CCONVERT

#include <atlstr.h>
#include <string>
class CConvert
{
public:
	//任意进制转十进制(All Radix to Int) 参数:任意进制字符串 进制R 作用:利用按权展开加和,返回十进制
	long int Atoi(std::string& S, int R);
	//十进制转任意进制(Int to All Radix)参数:十进制数Num,进制R 作用:利用除留余数法,返回逆序的余数,即返回所要转换的进制数
	std::string Itoa(int Num, int R);
private:
	int power(int R, int turn);
};

void CConvertDemo2();

#endif // !CCONVERT


2.定义实现文件

#include "CConvert.h"
#include <iostream>
using std::string;
using std::cout;
using std::endl;

//进制权值
int CConvert::power(int R, int turn)
{
	int ans = 1;
	while (turn--)
	{
		ans = ans * R;
	}
	return ans;
}

//任意进制转十进制(All Radix to Int) 参数:任意进制字符串 进制R 作用:利用按权展开加和,返回十进制
long int CConvert::Atoi(string& S, int R) {
	
	long int ans = 0;
	long int a;
	long int b;
	long int c;
	char t;

	for (int i = 0; i < S.size(); i++)//按权展开
	{
		t = S[i];
		if (t >= '0' && t <= '9') {
			a = S[i] - '0';
		}
		else {
			a = S[i] - 'A' + 10;
		}
		
		b = power(R, S.size() - i - 1);
		c = a * b;
		ans += c;
	}
	
	return ans;
}

//十进制转任意进制(Int to All Radix)参数:十进制数Num,进制R 作用:利用除留余数法,返回逆序的余数,即返回所要转换的进制数
string CConvert::Itoa(int Num, int R){
	string remain = "";
	int temp;
	do {
		temp = Num % R;//取余
		Num /= R;
		if (temp >= 10)
			remain += temp - 10 + 'A';//任意进制为大于基数大于10的进制 例如,十六进制
		else remain += temp + '0';
	} while (Num);
	reverse(remain.begin(), remain.end());//逆序
	return remain;
}

void CConvertDemo2() {
	CConvert cct;

	int num = 15;
	string s_result;
	long int n_result;

	s_result = cct.Itoa(num,16);
	cout << "十进制 " << num  << " 转为十六进制="<<s_result << endl;

	n_result = cct.Atoi(s_result, 16);
	cout << "十六进制 " << s_result << " 转十进制=" << n_result << endl;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值