问题:从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
想问一下我的这个回答哪里错啦
#include
#include
int main()
{
char a[8] = { 0 } ;
int i=0, len=0;
long long sum = 0;
gets(a);
len = strlen(a);
for (i = len; 0 < i; i--)
{
if (a[i] >= '0' && a[i] <='9')
{
sum = 16 * sum + a[i];
}
if (a[i] >= 'A' && a[i] <= 'F')
{
sum = 16 * sum + a[i] - 'A' + 10;
}
}
printf("%lld", sum);
}
大致的代码如下
int main()
{
//进制转换4:从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
int i=0,n=0;
char a[10];
unsigned long sum=0;
scanf("%s",a);
n=strlen(a);
for (i=0;i<n;i++)
{
//注:ascii码:A~65 0~48
//b=a[i];
if (a[i]>='0'&&a[i]<='9')// 输入的数范围在0~9
{
sum=sum*16;
sum=sum+a[i]-'0';
}
if (a[i]>='A'&&a[i]<='F')// 输入的数范围在10~15
{
sum=sum*16;
sum=sum+a[i]-'A'+10;
}
}
printf("%u",sum)
//-----------------------------------------------------------*/
return 0;
}
第一个if里面需要改成
sum=sum*16+a[i]-'0'