进制转换是一类常见的代码笔试面试问题,在实际的工程应用中,也是一类常需要处理的步骤。
这类问题在笔试中通常考察的是对代码的输入输出相关操作的熟悉程度。考察能否正确读取测试用例,并转换为正确的输出格式,是一类较为基础的问题。
输入输出
C++提供了多种输入输出命令。
在标准命名空间下,常用的输入输出命名为
using namespace std;
cin;//读取数据
cpit;//输出数据
cerr;//输出错误信息到标准错误流
clog;//用于输出日志到标准错误流
一般来说上述命令就已经足够,这对不同问题也可以去找行相应的函数。
我们这里使用getline来读取测试用例。该命令可以从输入流中读取一行字符串。
getline(cin, name)//从标准输入读取一行字符串。
具体实现
我们以16进制转换为10进制作为示例
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
class C_HexConverter{
public :
int to_decimal(const string &hexStr){
int decimal_value=0;
//读取字符串,并按照读取的字符转化为十进制数字
int len = hexStr.size();
for(int i = 0; i < len; i++)
{
char ch = hexStr[i];
int digit;
if(ch>='0' && ch<='9'){
digit = ch - '0';
}
if(ch >= 'A' && ch <= 'F'){
digit = ch - 'A' + 10 ;
}
if(ch >= 'a' && ch <= 'f'){
digit = ch - 'a' + 10 ;
}
decimal_value += digit*pow(16,len-i-1);
}
return decimal_value;
}
};
int main() {
string s;
C_HexConverter hex_converter;
while (getline(cin, s)) { // 注意 while 处理多个 case
int decimal_value = hex_converter.to_decimal(s);
cout<<decimal_value<<endl;
}
return 0;
}
其他进制转换为10进制的思路相同。