题目描述
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
示例1
输入
0xA
输出
10
c++:
#include<iostream>
using namespace std;
int main()
{
int n;
while(cin >> hex >> n)
{
cout << n << endl;
}
return 0;
}
详细转换:
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
int main()
{
string s;
int num = 0;
while (getline(cin, s))
{
num = 0;
for (int i = 2; i < s.size(); i++)
{
if (s[i] >= 'A' && s[i] <= 'F')
{
s[i] = s[i] - 'A' + 10;
}
else if (s[i] >= '0' && s[i] <= '9')
{
s[i] = s[i] - '0';
}
else
{
break;
}
num += int(s[i]) * pow(16, s.size() - i - 1);
}
cout << num << endl;
}
return 0;
}
注意:num=0放在while循环里,不然多组数据结果会累加。
python:
while True:
try:
print(int(input(),16))
except:
break
注意16在int()里
不用自带函数,如下:
while True:
try:
s = input()
num = 0
for i in range(2, len(s)):
if s[i] >= 'A' and s[i] <= 'F':
num += (ord(s[i]) - ord('A') + 10) * 16 ** (len(s) - i - 1)
elif s[i] >= '0' and s[i] <= '9':
num += (ord(s[i]) - ord('0')) * 16 ** (len(s) - i - 1)
else:
pass
print(num)
except:
break
ord()函数返回ASCII码
注意str类型不接受赋值,所以以下操作会报错:
if s[i] >= 'A' and s[i] <= 'F':
s[i] = str(ord(s[i]) - ord('A') + 10)
elif s[i] >= '0' and s[i] <= '9':
s[i] = str(ord(s[i]) - ord('0'))
TypeError: 'str' object does not support item assignment