牛客刷题——进制转换

大家好,本题是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;
}


还有一个需要注意的问题,我最开始并没有用while循环cin字符串的值,而是直接写的cin>>s,但是会报错,提示我有没有循环输入多个case,这个时候,就添加while,让它可以循环测试多个它的测试用例就可以了。其实并不是语法错误,而是编程答题方面的一个小知识。

然后本题就通过了,这道题还是非常简单的,后面我也会继续挑战,我们下期见。

猜你喜欢

转载自blog.csdn.net/miss_yuki/article/details/79986236