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


    #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("二进制:
    %s
    其长度:%d
    
    ",str_2,strlen(str_2));
        
        char str_10[1000]="0";
        _2to10(str_2,str_10);
        printf("其十进制数是:
    ");
        puts(str_10);
    }

  • 相关阅读:
    单元测试大揭密
    浅析C#中 ConcurrentDictionary的实现
    C#中 ??、 ?、 ?: 、?.、?[ ]
    队列-exchange
    matlab绘制一个点
    Ubuntu install of ROS Melodic
    matlab绘制树
    matlab scatter3函数
    多个QDockWidget用程序控制自动tab切换
    基于IFC数据的施工吊装模拟
  • 原文地址:https://www.cnblogs.com/dzqdzq/p/3216497.html
Copyright © 2020-2023  润新知