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

来源:互联网 发布:mysql 查看事件 编辑:程序博客网 时间:2024/04/28 14:14

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

题目

问题描述
  从键盘输入一个不超过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;}
0 0
原创粉丝点击