/*问题描述
从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535*/
#include <stdio.h>
#include<string.h>
#define MAXSIZE 10
char data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int main(){
int len, i, j, k, m;
long z=0;
char input[MAXSIZE];
scanf("%s", &input);
len=strlen(input);
for(i=0;i<len;i++){
for(k=0;k<16;k++){
if(input[i] == data[k]){
m=k;
break;
}
}
for(j=0;j<len-i-1;j++){
m*=16;
}
z+=m;
}
printf("%I64d",z);
return 0;
}
这样是正确的,但是如果我把char data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};改成char data[15]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};之后,输入Fprint出来就是0.这是为什么呢?