AcWing3452.进制转换(十六进制转化成十进制)

方法1 cin版

cin可以cin >> hex >> x以16进制读入x,默认以十进制输出

#include<iostream>

using namespace std;

int main()
{
    int x;
    while(cin >> hex >> x) cout << x << endl;
    return 0;
}

方法2 手写进制转换

读入字符串后,如果第一个字符是-负号,就让sign = -1,最后输出结果乘上sign符合变量.

处理数字字符串:先把最前面两个字符0x截掉,后面的数字由高位到低位一位一位计算res = res * 16 + t,t为当前位置代表的数

代码如下:

#include<iostream>
#include<cstring>
#include<algorithm>

using namespace std;

int main()
{
    string str;
    while(cin >> str)
    {
        int sign = 1;
        if(str[0] == '-') 
        {
            sign = -1;
            str = str.substr(1);
        }
        
        // 删除0x
        str = str.substr(2);
        
        int res = 0;
        for(auto c : str)
        {
            int t = 0;
            if(c >= 'A' && c <= 'F') t = c - 'A' + 10; // A代表的是10,记得+10
            else if(c >= 'a' && c <= 'f') t = c - 'a' + 10;
            else t = c - '0'; // 否则字符c就是数字
            
            res = res * 16 + t;
        }
        
        cout << res * sign << endl; // 记得乘sign
    }
    
    return 0;
}
posted @ 2022-08-14 15:09  r涤生  阅读(52)  评论(0编辑  收藏  举报