进制转换问题,只有25分实在不知道哪里有问题(16-10)

#include
#include
#include

int getVal(char ch)
{
if(ch>='0' && ch<='9')
{
return ch - '0';
}
else
{
return ch - 'A' + 10;
}
}

int main()
{
char ch[10];
int len, i, val;
long int sum = 0;

gets(ch);
len = strlen(ch);

for(i=0; i<len; i++)
{
    val = getVal(ch[i]);
    sum += val * pow(16, i);
}

printf("%u\n", sum);

return 0;

}

 #include <string.h>
#include"stdio.h"
#include "math.h"
int getVal(char ch)
{
    if(ch>='0' && ch<='9')
    {
        return ch - '0';
    }
    else
    {
        return ch - 'A' + 10;
    }
}
int main()
{
    char ch[10];
    int len, i, val;
    long int sum = 0;
    gets(ch);
    len = strlen(ch);

    for(i=0; i<len; i++)//修改
    {
        val = getVal(ch[len-i-1]);//修改
        sum += val * pow(16.0, i);//修改
    }

    printf("%ld\n", sum);//格式不对

    return 0;
}