请问我这样写要怎么改才对,感觉还差哪,就是找不出来了

任务描述:
读入一个以1开头的二进制序列,请将其转换成十进制数输出。(用循环解决,不能使用数组和函数)
输入格式:
若干行,每行代表一组数据,是一串二进制数的1-0序列,最多不超过30位。所有数据只由1、0和回车组成,不包含任何其它空白字符。
输出格式:
依次输出每组数据转换成的十进制数,每个输出结果单独占一行。
输入样例:
1001
1000000000000000000000000000000
11110011
11110111
11111111
101
1
输出样列:
9
1073741824
243
247
255
5
1

#include<stdio.h>
int main(){
    int n,sum=0,i,j,b=0,c=0;
    int a[1000];
    while(~scanf("%d",&n)){
        for(i=0;n!=0;i++){
            sum=n%10;
            a[i]=sum;
            n/=10;
            c++;
        }
        for(j=0;j<c;j++){
           b=b+a[j]*pow(2,j);
        }
        printf("%d\n",b);
    }
    return 0;
}

要求不能用数组,一个参考的代码示例如下

#include<stdio.h>
int main(){
    char n;
    int sum=0,i=0;
    while(scanf("%c",&n) != EOF){
        if(n == '\n'){
            printf("%d\n", sum);
            sum = 0;
            i = 0;
        }else{
            sum += (n - '0') * (1 << i);
            i++;
        }
    }
    return 0;
}

仅供参考!谢谢!

img

img

img

img

img

img

#include <stdio.h>
#include <math.h>
int main()
{
    long long sum = 0LL;
    int n[32], cnt = 0;
    char c;

    while ((c = getchar()) != '\n' && cnt < 31)
    {
        n[cnt++] = c - '0';
    }
    for (int i = cnt - 1, j = 0; i >= 0; i--, j++)
    {
        if (n[i] == 1)
            sum += pow(2, j);
    }

    printf("%lld\n", sum);
    return 0;
}