因为最近在写一个进制转换器,所以遇到了一些问题,以下是我在写的过程中遇到的已经解决的问题,即如何将一个无限长度的二进制串转换为十进制串的算法。这是群里的一个朋友帮我写的,并非我所写,真的很感谢我的那位朋友,他真的很了不起。
今天我把它共享出来,希望这个程序能对有所需要的朋友提供一些帮助。
代码:#include <stdio.h>
#include <string.h>
#define MAX_LEN 10000
typedef struct{
int len;
char value[MAX_LEN];
} TBigInt, *pBigInt;
void AddBit(pBigInt s,char BitValue){ //加一位, 0或者1。
int i;
for (i=0;i<s->len;i++)
s->value[i]*=2;
s->value[0]+=BitValue;
for (i=0;i<s->len;i++){
s->value[i+1]+=s->value[i]/10;
s->value[i]%=10;
}
if (s->value[s->len]) s->len++;
}
void OutputBigInt(pBigInt s){ //输出大整数类型
int i;
if (s->len==0){
puts("0");
} else {
for (i=s->len-1;i>=0;i--)
putchar(s->value[i]+'0');
putchar('\n');
}
}
int main(){
static char buf[1000000];
static TBigInt BigInt;
while (scanf("%s",buf)!=EOF){
memset(&BigInt,0,sizeof BigInt);
int i;
for (i=0;buf[i];i++)
AddBit(&BigInt,buf[i]=='1'?1:0);
OutputBigInt(&BigInt);
}
return 0;
}