进制转换
写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )
输入描述:
输入一个十六进制的数值字符串。
输出描述:
输出该数值的十进制字符串。
输入例子:
0xA
输出例子:
10
解答(个人版):
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
using namespace std;
int pows(int a,int n)
{
int result = 1;
int i=0;
while(i<n)
{
result*=a;
++i;
}
return result;
}
int main()
{
string str;
//string dst;
int i,j,k,result=0;
vector<int>v;
while(cin>>str)
{
// k = 0;
v.clear();
for(i=2;i<str.length();++i)
{
//cout<<str[i]<<endl;
if(str[i]<='9'&&str[i]>='0')
{
v.push_back(str[i]-'0');
}
else
{
if (str[i]=='A'||str[i]=='a')
{
v.push_back(10);
}
if (str[i]=='B'||str[i]=='b')
{
v.push_back(11);
}
if (str[i]=='C'||str[i]=='c')
{
v.push_back(12);
}
if (str[i]=='D'||str[i]=='d')
{
v.push_back(13);
}
if (str[i]=='E'||str[i]=='e')
{
v.push_back(14);
}
if (str[i]=='F'||str[i]=='f')
{
v.push_back(15);
}
}
}
int n = 1;
result = 0;
for(i=0;i<v.size();++i)
{
result+=(v[i]*pows(16,(v.size()-n++)));
}
cout<<result<<endl;
}
return 0;
}
解答(网友版):
#include<iostream>
#include<string>
using namespace std;
int main(){
string input,output;
int i,num;
while(cin>>input){
num=0;
for(i=2;i<input.size();i++){
if(input[i]>='a'&&input[i]<='f')
num=num*16+(input[i]-'a'+10);
else if(input[i]>='A'&&input[i]<='F')
num=num*16+(input[i]-'A'+10);
else
num=num*16+(input[i]-'0');
}
output=to_string(num);
cout<<output<<endl;
}
return 0;
}
另外,我还发现了一种简单粗暴直接的办法:
链接:https://www.nowcoder.com/questionTerminal/8f3df50d2b9043208c5eed283d1d4da6
来源:牛客网
#include <iostream>
using namespace std;
int main()
{
int a;
while(cin>>hex>>a)
{
cout<<a<<endl;
}
return 0;
}