#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); }