100分求解:任意长度二进制数怎么转换为十进制数

100分求解:任意长度二进制数如何转换为十进制数
主要讨论下思路问题。

十进制转二进制我感觉容易点。。。。。

二进制转十进制却。。。。。。。。。

------解决方案--------------------
考虑到溢出问题,可用String做参数
里边也可以把这个参数截成数段,以4位一段吧
分别计算每4段的十进制值后根据各个字段在原string中的位置再分别 * 16 的几次方
------解决方案--------------------
换成十进制后还溢出的话就考虑用解决大数乘法的方法了
------解决方案--------------------
C/C++ code
/*
对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,
我们称B为A的二进制逆序数。
例如对于十进制数173,它的二进制形式为101011101,逆序排列得到10110101,
其十进制数为181,181即为173的二进制逆序数
输入:
一个1000位(即10^999)以内的十进制数。
输出:
输入的十进制数的二进制逆序数。
样例输入:
173
样例输出:
181
*/

#include "stdio.h"
#include "string.h"
#define N 2000

int main(){
    char a[N];
    char b[4*N];
    int length;
    scanf("%s",a);

    int i,k,start;
    int d,tmp;
    start=0,k=0;
    length=strlen(a);
    for(i=0;i<length;i++){
        a[i]-='0';
    }
    printf("\n\n%d\n\n", a[length-1]);
    while(a[length-1]!=0 || start<length){
        if(a[length-1]%2==1){
            b[k]=1;
        }
        else b[k]=0;
        k++;
        d=0;
        for(i=start;i<length;i++){
            tmp=d*10+a[i];
            a[i]=tmp/2;
            d=tmp%2;
        }
        if(a[start]==0) start++;

    }

    for(i=0;i<k;i++){
        printf("%d",b[i]);
    }
    printf("\n");

    int len,j;
    len=1;
    for(j=0;j<N;j++){
        a[j]=0;
    }
    for(i=0;i<k;i++){
        for(j=0;j<len;j++){
            a[j]*=2;    
        }
        j=0;
        while(a[j]!=0 || j<len){
            if(a[j]>=10){
                a[j]%=10;
                a[j+1]+=1;
            }        
            j++;
        }
        len=j;

        if(b[i]==1) a[0]+=1;
    }

    for(i=len-1;i>=0;i--){
        printf("%d",a[i]);
    }
    printf("\n");

    return 0;
}

------解决方案--------------------
“任意长度”=2^n,跟大数阶乘有异曲同工之处
------解决方案--------------------
探讨
“任意长度”=2^n,跟大数阶乘有异曲同工之处

------解决方案--------------------
探讨
111010100111001
= 1*2^14 + 1*2^13 +....+ 这有什么难的