牛客刷题——进制转换
程序员文章站
2022-07-15 09:40:44
...
大家好,本题是string类的题目,写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。
首先说下思路,作为编程小白,我最开始想到的是用#define把ABCDEF的值都转换成对应的数字,这样每次读取的时候不用判断到底是什么数字,但是后来发现这样不行,C++不允许这样做,想来也是,'A'作为一个常量字符,值已经是固定的了,不能再修改了。
第二步我想到的是用switch,把从‘0’到‘F’的字符都直接转换成对应的数字,然后在乘16的i次方。后来看了讨论,看到了一种更简单的方法,最后采用的也是这种方法,把这16种都switch未免有点麻烦,其实不管是字母字符还是数字字符,虽然直接读取的是ASCII码,但他们的差和他们所代表的的数字的差是相同的,利用这个方法,判断可以如下简化,贴上代码:
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
while(cin>>s){
int i;
int j = 1;
int result = 0;
int len = s.length();
for (i = len - 1;i >= 2;i--){
if(s[i]>='A'&&s[i]<='F'){
result += (s[i]-'A'+10)*j;
}
else result += (s[i]-'0')*j;
j *= 16;
}
cout<<result<<endl;
}
return 0;
}
然后本题就通过了,这道题还是非常简单的,后面我也会继续挑战,我们下期见。
上一篇: 【模拟】Parity
下一篇: C++字符串操作总结