【原创】任意长度的二进制字符串和十进制串的转换算法(高精度)
作 者: 没有风
时 间: 2007-12-04,21:54:57
链 接: http://bbs.pediy.com/showthread.php?t=56002
因为最近在写一个进制转换器,所以遇到了一些问题,以下是我在写的过程中遇到的已经解决的问题,即如何将一个无限长度的二进制串转换为十进制串的算法。这是群里的一个朋友帮我写的,并非我所写,真的很感谢我的那位朋友,他真的很了不起。
今天我把它共享出来,希望这个程序能对有所需要的朋友提供一些帮助。
作 者: 没有风
时 间: 2007-12-04,21:54:57
链 接: http://bbs.pediy.com/showthread.php?t=56002
因为最近在写一个进制转换器,所以遇到了一些问题,以下是我在写的过程中遇到的已经解决的问题,即如何将一个无限长度的二进制串转换为十进制串的算法。这是群里的一个朋友帮我写的,并非我所写,真的很感谢我的那位朋友,他真的很了不起。
今天我把它共享出来,希望这个程序能对有所需要的朋友提供一些帮助。
代码:
#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; }
#include <stdio.h>#include <string.h>#define MAX_LEN 10000typedef 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;}