C++ 进制数专题

(一)十进制 转 K 进制(入门)

C++ 进制数专题_第1张图片

 思路:

根据        “除基取余法”

“基”        ----->        表示需要转换的进制数  K

“取余”        ----->        表示 待转换的十进制数除以  K  后,剩余的数值,做低位存储

代码实现如下:

#include 	//万能头文件
using namespace std;
vectorbit;		// 储存结果数组

int main()
{
	int num_bit10;		// 表示 十进制数
	int num_bitK;	//	表示 需要转换的 K 进制数
	cin >> num_bit10 >> num_bitK;		// 输入数值
	do {		// 因为输入数值为 0 后,无结果存储,所以用 do——while
		int temp = num_bit10 % num_bitK;	// 开始 取余
		num_bit10 /= num_bitK;		// 取完余  后  原数值除基
		bit.push_back(temp);		//  尾插  存储 结果余数
	} while (num_bit10 != 0);
	for (int i = (int)bit.size() - 1; i > -1; i--) {		// 由于是低位存储,所以循环高位位输出
		if ((int)bit[i] >= 10) {		// 判断 K 进制数中是否 超出 10进制数
			printf("%c", bit[i] - 10 + 'A');		// 根据超出 10 进制数 用英文字母代替数值
		} else {
			cout << bit[i];		// 正常输出转换进制数 0 ~ 9 之间的数值
		}
	}
	return 0;
}

(二)K 进制数 转 十进制数

C++ 进制数专题_第2张图片

 思路:

对于一个十进制数 y = d1 d2 ... dn ,它可以表示的形式为:

y = d1 * 10^n - 1 + d2 * 10^n - 2 + ... + dn - 1 * 10 + dn;

同理,如果 K 进制数 x = a1 a2 ... an, 所以它的十进制数也可以这样的形式表示:

y = a1 * P^n - 1 + a2 * P^n - 2 + ... + an - 1 * P + an;

代码实现如下:

#include 
using namespace std;
int main()
{
	string num;		// 表示 待转换的  K 进制数 
	int num_bitQ;		// 表示  K 进制 
	int pos = 0;		// 表示	 该进制数所在的下标 
	int ans = 0;		// 存储结果 
	cin >> num >> num_bitQ;		// 开始输入 
	for(int i = (int)num.size() - 1;i > -1;i--,pos++){		// 由于是低位存储  所以从高位开始读取 
		if(num[i] >= '0' && num[i] <= '9') ans += (num[i] - '0') * pow((double)num_bitQ,pos);		// 判断  K进制数 是否为数值 
		else if(num[i] >= 'A' && num[i] <= 'Z') ans += (num[i] - 'A' + 10) * pow((double)num_bitQ,pos);	// 判断  K进制数 是否为字母
		//  随后存储结果  ans 
	}
	cout << ans << endl;		// 输出结果 ans 
	return 0;
}

你可能感兴趣的:(算法笔记,c++,算法)