熬夜把第三个面试题做了,16进制转换乘10进制,依然是华为面试的题目,在此把自己做的一点成果分享给大家。
该面试编程题来自于牛客网,本人分享在此仅供大家学习与交流用,不担负任何法律责任。博文版权归博主所有,转载需注明出处。
问题描述
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串
输入例子:
0xA
输出例子
10
思路与解答
题目比较简单,如果各位看官有问题请直接百度。
程序代码
//十六进制与十进制转换
#include <iostream>
#include <string>
#include <math.h>
using namespace std;
const int N = 100;
//过滤十六进制前的‘0x’
string get_string()
{
string input;
cin >> input;
return input.substr(2,input.length());//注意子串的位置从2开始,不是1
}
int ch_to_num(char c)
{
switch(c)
{
case '0':
return 0;
case '1':
return 1;
case '2':
return 2;
case '3':
return 3;
case '4':
return 4;
case '5':
return 5;
case '6':
return 6;
case '7':
return 7;
case '8':
return 8;
case '9':
return 9;
case 'a':
return 10;
case 'b':
return 11;
case 'c':
return 12;
case 'd':
return 13;
case 'e':
return 14;
case 'f':
return 15;
default:
return 0;
}
}
int main()
{
int str_len =0,a[N],sum=0;
string input = get_string();
str_len = input.length();
for(int i =0;i<str_len;i++)
{
a[i] = ch_to_num(tolower(input[i]));//大写转小写
}
for(int i = 0;i <str_len;i++)
{
//每一位的数字乘与16^(位数-1)
sum += a[i]*pow(16,double(str_len-i-1));
}
cout << sum<<endl;
return 0;
}