进制转换
问题描述:实现两种不同进制之间的数据转换。
题目分析:
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修饰符一定要放在函数定义部分。
