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

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

题目

问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。

  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示

样例输入
FFFF
样例输出
65535
时间限制:
1.0s
内存限制:
512.0MB

AC代码

#include <iostream>
#include<math.h>
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<<num;
    return 0;
}

AC代码修改版

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

#include <iostream>
#include<math.h>
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<<num;
    return 0;
}
    原文作者:进制转换
    原文地址: https://blog.csdn.net/u014376020/article/details/50134245
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞