一、题目描述:
二、思路分析:
十六进制转十进制主要注意下每位是数字还是字母,因为ASCII码中,ABC和123并不是连着的,因此需要加个判断
if(s[i] <= 'F' && s[i] >= 'A'){
tt += s[i] - 'A' + 10;
}else{
tt += s[i] - '0';
}
注意要从前往后遍历的同时,跳过前两个点,这道题没有太坑,直接跳过前两个就可以,要是整个0x1230xAF那会稍微恶心一点
另一种方法是从后往前遍历,但需要维持一个系数变量,每次乘以16再相加,比上一个方法多用了一个变量
三、AC 代码:
#include<iostream>
using namespace std;
int main(){
string s;
while(cin >> s){
int tt = 0;
for(int i =2 ; i < s.size(); i++){
tt = tt << 4;
if(s[i] <= 'F' && s[i] >= 'A'){
tt += s[i] - 'A' + 10;
}else{
tt += s[i] - '0';
}
}
printf("%d\n", tt);
}
}
四、总结:
如图,我其实只是将tt = tt * 16改为了 tt = tt >> 4,通过位运算,竟然加快了一倍速度(或许某些题就是差在这里就超时间了)
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情