欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

牛客刷题——进制转换

程序员文章站 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;
}


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

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