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;
}
rds_blogs