进制转换(华为)

2016/05/17 C和C++基础

题目描述

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

输入描述:

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

输出描述:

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

输入例子:

0xA

输出例子:

10

#include <iostream>
#include <string>
#include <vector>
#include <math.h>

using namespace std;

int main(){
	string str;
	while(cin>>str){
		vector<int> erjin;
		for(int i=2;i<str.length();i++){
			int num;
			if(str[i]=='A')
				num=10;
			else if(str[i]=='B')
				num=11;
			else if(str[i]=='C')
				num=12;
			else if(str[i]=='D')
				num=13;
			else if(str[i]=='E')
				num=14;
			else if(str[i]=='F')
				num=15;
			else
				num=str[i]-'0';

			int len=0;
			vector<int> temp;
			while(num>0){                  //转换为二进制
				temp.push_back(num%2);
				len++;
				num=num/2;
			}
			for(int i=0;i<4-len;i++){       //补零
				temp.push_back(0);
			}

			for(int i=0;i<4;i++)            //倒置
				erjin.push_back(temp[3-i]);
		}

		int sum=0;
		int size=erjin.size();
		for(int i=0;i<size;i++)
			sum=sum+pow(2.0,i)*erjin[size-i-1];
		cout<<sum<<endl;
	}
}

Search

    Post Directory