进制转换

作者: qiqi 分类: 经典案例 发布时间: 2025-10-19 21:32

提交链接

问题描述:实现两种不同进制之间的数据转换。
题目分析:
1.数据规模10的9次方,int类型变量足够大。
2.数据存储,考虑有十六进制的存在,需要使用字符串存储数据。
3.数组的大小,因为可能存在二进制,所以需要log(10^9),大约30左右。
4.特殊值,比如0是否能够正常输出。

#include <bits/stdc++.h>
using namespace std;
char a[100], b[100];

int n2ten(char a[], int base);
void ten2n(int dec, int base, char b[]);

int main()
{
	int b1, b2;
	int dec;
	cin	>> b1 >> a >> b2;
	if (strcmp(a, "0") == 0)
	{
		cout << 0 << endl;
		return 0;
	}

	dec = n2ten(a, b1); //将n进制数转成10进制
	//cout << "dec=" << dec << endl;//测试第一个函数

	ten2n(dec, b2, b);	//将十进制数转成m进制数
	cout << b << endl;

	return 0;
}

int n2ten(char a[], int base)
{
	int quan = 1, len, res = 0, t;
	char ch;
	len = strlen(a);

	for (int i = len - 1; i >= 0; i--)
	{
		ch = a[i];
		if (ch >= '0' && ch <= '9')
			t = ch - '0';
		else
			t = ch - 'A' + 10;

		res += quan * t;
		quan *= base;
	}
	return res;
}

void ten2n(int dec, int base, char b[])
{
	int i = 0, p, q, t;
	char ch;
	while (dec)
	{
		t = dec % base;
		if (t < 10)
			ch = t + '0';
		else
			ch = t - 10 + 'A';
		b[i] = ch;

		dec /= base;
		i++;
	}
	b[i] = 0;

	//交换
	p = 0, q = i - 1;
	while (p < q)
	{
		ch = b[p];
		b[p] = b[q];
		b[q] = ch;
		p++, q--;
	}
}

关于是否使用inline的问题。
inline通过消除函数调用开销(如栈操作和跳转指令)提升效率,尤其适合短小且频繁调用的函数。
内联函数应满足以下条件:
(1)函数体简单(通常不超过10行);
(2)不含复杂控制结构(如循环、switch或递归);
(3)高频调用的小函数(如简单数学运算)。

inline修饰符一定要放在函数定义部分。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

标签云