问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535
解答代码
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
//将N进制转成十进制
long long TransFromN(string data,int n)
{
long long i,y,j,a[50];
long long result=0;
int length=data.length();
for(i=0;i<length;i++)
{
if(data[i]>='0' && data[i]<='9')
a[i]=data[i]-'0';
else
a[i]=toupper(data[i])-'A'+10;
}
long long power=0;
for(i=length-1;i>=0;i--)
{
y=1;
for(j=1;j<=power;j++)
y=y*n;
power++;
result+=y*a[i];
}
return result;
}
int main()
{
string data;
int n=16;
while(cin>>data)
{
long long result=TransFromN(data,16);
cout<<result<<endl;
}
return 0;
}