Time Limit: 1 second
Memory Limit: 50 MB
【问题描述】
输入一个4位16进制数,将它转化位10进制数并输出。
【输入】
共1行;
一个4位16进制数。
【输出】
包含2行,第一行重写该4位16进制数。 第2行,dec:一个整数,表示转化的结果。
【输入样例】
1a2b
【输出样例】
1a2b
dec:6699
【题解】
1a2b的转化过程为
:先倒序 b2a1
a = 10 b =11
dec = 16^(0) * 11 + 16^(1) *2 + 16^(2)*10 + 16^(3)*1 = 6699'
模拟下这个过程就好
【代码】
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
const int maxn = 1000;
string s1;
int a[maxn],ans = 0;
void input_data()
{
cin >> s1;
}
void get_ans()
{
for (int i = 3;i >= 0;i--) //倒序存入整形数组 其中加入了预防大写字母的方案。
{
if (s1[i] >= 'a' && s1[i] <= 'z')
a[4-i] = s1[i] - 'a' + 10;
if (s1[i] >= 'A' && s1[i] <= 'Z')
a[4-i] = s1[i] - 'A' + 10;
if (s1[i] >= '0' && s1[i] <= '9')
a[4-i] = s1[i] - '0';
}
ans = a[1] + 16*a[2] + 16*16*a[3] + 16*16*16*a[4]; //有指出是4位 所以直接获取答案了。
}
void output_ans()
{
cout << s1 << endl;
printf("dec:%d
",ans);
}
int main()
{
input_data();
get_ans();
output_ans();
return 0;
}