牛客网 - 在线编程 - 华为机试 - 进制转换

题目描述

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )

输入描述:

输入一个十六进制的数值字符串。

输出描述:

输出该数值的十进制字符串。

示例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

猜你喜欢

转载自blog.csdn.net/qq_39735236/article/details/81915756