蓝桥杯OJ刷题日记——11-基础练习 十六进制转十进制

基础练习 十六进制转十进制

题目

问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示
样例输入
FFFF
样例输出
65535
时间限制:
1.0s
内存限制:
512.0MB

AC代码

#include 
#include
using namespace std; 
int main(int argc, char *argv[]) {
    string str;
    cin>>str;
    int len=str.length();
    long long num=0;
    for(int i=len-1;i>=0;i--){
        int t=0;
          if(str[i]<=57){
            t=str[i]-48;
          }else{
            t=str[i]-55;
          } 
        num+=(t* (long long)pow(16,(double)(len-1-i)) );
    }
    cout<return 0;
}

AC代码修改版

无意间翻看发现又可以优化的地方,于是修改了一下

#include 
#include
using namespace std; 
int main(int argc, char *argv[]) {
    string str;
    cin>>str;
    int len=str.length();
    long long num=0;
    for(int i=len-1;i>=0;i--){
        int t=0;
        t=str[i]-(str[i]<=57?48:55);
        num+=(t* (long long)pow(16,(double)(len-1-i)) );
    }
    cout<return 0;
}

你可能感兴趣的:(蓝桥杯)