老是不对啊,不知道错哪儿了,求解

Problem Description
题目很简单,就是把一个二进制数转换为十进制数,然后输出。
Input Description
多组测试数据,第一行一个正整数 n (n<=1000),表示后面有 n 组测试数据,每组一行。
接下来有 n 行,每行为一个不超过32位的二进制数。
Output Description
对每组测试数据,在一行中输出对应的十进制数。
Sample Input
2
0111
1111
Sample Output
7
15
我的代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
int n;
scanf("%d", &n);
char a[33];
int i, j, k;
unsigned int sum;

for (i = 1;i <= n;i++)
{
    sum = 0;
    scanf("%s", a);
    for (j = strlen(a)-1, k=0;j >=0;j--, k++)
    {
       sum += (a[j]-'0') * pow(2, k);
    }
    printf("%u\n", sum);
}

return 0;

}

既然j从高位开始,为何k从0开始