Description
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
Input
Output
Sample Input
FFFF
Sample Output
65535
---------------------------------------------------------------------------------------------------------------------------------
这道题不可以投机取巧利用%x与%d,只能老实模拟一波。与二进制转十进制类似,十六进制转十进制也是16的0次方、16的1次方、16的3次方......按位递增。例如十六进制数123转换为十进制就是16*16*1+16*16*2+3=291。本题注意结果可能很大需要开到long long,十六进制数有可能是数字也可能是大写字母。
ac代码↓
#include<bits/stdc++.h>
using namespace std;
int main()
{
char x[10];
memset(x,0,sizeof(x));
while(cin>>x)
{
int len=strlen(x);
long long sum=0;//注意sum要开大一点
for(int i=0;i<len;i++)
{
if(isupper(x[i]))
sum+=(x[i]-'A'+10)*pow(16,(len-i-1));
else if(isdigit(x[i]))
sum+=(x[i]-'0')*pow(16,(len-i-1));
}
cout<<sum<<endl;
}
}