将二进制串转换成十进制串

#include<stdio.h>
#include<string.h>

//返回s1*num   0<=num<=10
char* mul(char *s1,int num)
{
    if(num==1) return s1;
    else if(num==0 || strcmp(s1,"0")==0) return "0";
    else if(num==10) return strcat(s1,"0");
    int len1=strlen(s1);
    char str[1000];//可以计算10000位以内的数
    int temp=0;//表示要进位的数,如9*9=81   则temp存储的是8
    int j=0;
    for(int i=len1-1;i>=0;i--)
    {
        int t=(s1[i]-'0')*num+temp;
        str[j++]=t%10+'0';
        temp=t/10;    
    }
    if(temp)
        str[j++]=temp+'0';
    str[j]=0;//形成串
    strrev(str);
    return str;  
}
void add1(char *s)
{
    char *p=s;
    if(*s)
    {
        while(p[1])
            p++;
    }
    //此时的p指向最后一个数,如s="12345",那么p指向5的位置
    while(s<=p)
    {
        if(*p<'9')
        {
            *p=*p+1;
            return;
        }
        else
        {
            *p='0';
            p--;
        }
    }
    *s='1';
    strcat(s,"0");
}
char* _2to10(char *str_2,char *str_10)
{
    char *bin = str_2;
    while(*bin)
    {
        
        strcpy(str_10,mul(str_10,2));
        if(*str_2=='1')
            add1(str_10);
        bin++;
    }
    return str_10;
}
void main()
{
    char *str_2="11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111\
11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
    //char str_2[200]="11111111111111111111111111111111";
    printf("二进制:\n%s\n其长度:%d\n\n",str_2,strlen(str_2));
    
    char str_10[1000]="0";
    _2to10(str_2,str_10);
    printf("其十进制数是:\n");
    puts(str_10);
}

posted @ 2013-07-26 10:17  Please Call me 小强  阅读(745)  评论(0编辑  收藏  举报