问题描述:从键盘输入一个不超过8位的十六进制字符串,将它转化为正的十进制数后输出。注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入:
FFFF
样例输出:
65535
初次提交:
#include<iostream>
#include<cstring>
using namespace std;
void Hex2Dec(char *s)
{
int n=strlen(s);
int a[n],i,x;
for(i=0;i<n;i++)//取出n位十六进制串中字符并将它转化成数
{
if(s[i]=='A') a[i]=10;
else if(s[i]=='B') a[i]=11;
else if(s[i]=='C') a[i]=12;
else if(s[i]=='D') a[i]=13;
else if(s[i]=='E') a[i]=14;
else if(s[i]=='F') a[i]=15;
else a[i]=s[i]-'0';//将字符0~9转化成数0~9
}
//秦九韶算法
x=a[0];
for(i=0;i<n;i++)
x=16*x+a[i];
cout<<x<<endl;
}
int main()
{
char s[9];
cin>>s;
Hex2Dec(s);
return 0;
}
初次测试得分75,程序没有问题。仔细看了里面的测试结果之后,发现当输入7位的八进制数FFFFFFF(即无穷大)时,程序运行结果返回-1。
第二次测试:
#include<iostream>
#include<cstring>
using namespace std;
void Hex2Dec(char *s)
{
int n=strlen(s);
int a[n],i;
long long x;
for(i=0;i<n;i++)//取出n位十六进制串中字符并转化为数
{
if(s[i]=='A') a[i]=10;
else if(s[i]=='B') a[i]=11;
else if(s[i]=='C') a[i]=12;
else if(s[i]=='D') a[i]=13;
else if(s[i]=='E') a[i]=14;
else if(s[i]=='F') a[i]=15;
else a[i]=s[i]-'0';//将字符0~9转化成数0~9
}
//秦九韶算法
x=a[0];
for(i=0;i<n;i++)
x=16*x+a[i];
cout<<x<<endl;
}
int main()
{
char s[9];
cin>>s;
Hex2Dec(s);
return 0;
}
测试完全通过。