熬夜把第三個面試題做了,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;
}