二进制转换十进制程序

或者十进制转换成二进制,八进制,十六进制的,

在或者二进制转换成任意的进制。

最佳答案
本回答由提问者推荐

yang 11级
2009-11-06 回答

二进制转换十进制:

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

int main() { char binary[20]; float ten=0; int i=0,t,k; scanf("%s",binary); k=strlen(binary); while(k--) { t=binary[k]-'0'; if(t) ten+=pow(2,i); i++; } printf("%.0f\n",ten); return 0; }

十进制转换成二进制,八进制,十六进制的

#include <stdio.h>

/*输出*/ void print(int i,char *s) { while(i--) { printf("%c",s[i]); } printf("\n"); }

/*十进制转换八进制*/ void TentoE(int n) { int i=0; char str[10]; while(n>0) { str[i]=n%8+'0'; n/=8; i++; } printf("Octal:"); print(i,str); }

/*十进制转换十六进制*/ void TentoHex(int n) { int i=0,t; char str[10]; while(n>0) { t=n%16; if(t>=10) { str[i]=t%10+'a'; } else str[i]=n%16+'0'; n/=16; i++; } printf("Hex:"); print(i,str); }

/*十进制转换二进制*/ void TentoB(int n) { int i=0; char str[20]="\0";

while(n>0) { str[i]=n%2+'0'; n/=2; i++; } printf("Binary:"); print(i,str); }

void main() { int x; scanf("%d",&x); TentoB(x); //转换二进制并输出 TentoE(x); //转换八进制并输出 TentoHex(x); //转换十六进制并输出 }

二进制转换任意进制:

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

int main() { char binary[20]; float ten=0; int i=0,t,k,n;

scanf("%s",binary); //输入二进制; scanf("%d",&n); //输入要转换的进制. k=strlen(binary); /*先将二进制转换成十进制*/ while(k--) { t=binary[k]-'0'; if(t) ten+=pow(2,i); i++; } /*再将十进制转换成n进制*/ t=ten;i=0; memset(binary,'\0',20); //将字符数组清空. while(t) { binary[i++]=t%n+'0'; t/=n; } while(i--) { printf("%c",binary[i]); } return 0; }

满意还请采纳..

最新回答 (2条回答)

头像
匿名用户 5级
2009-11-05 回答
十进制调整应该是把二进制数调整成BCD码或压缩BCD码。
比如一个数 0x21 调整之后是 0x33 (压缩BCD码)
原理我忘计了,但估计算法应该是这样:把二进制数的前4位上例中也就是2乘上一个6然后加到二进制数的后4位上,上例中就是 2 * 6 + 1 = 13,然后把这个结果除以10, 把余数做为BCD码的个位数,把商数和二进制数的前4位相加做为BCD码的十位数,如果十位数大于10,则减10并进一位

再举一例算一下看对不 0x0AB, 把A*6 +B = 71, 然后除10商7作1,则BCD码的个位为1,然后把A+7 = 17 做个10位数,因为大于10所以减10得到个7,并进一位到百位,最后结果171。结其它方法验证这个结果正确。

注:上面的常数6是10和16的差。因为二进制数分成前4位和后4位两部分后,前一部分的权就相当于16了。
wolf 11级
2009-11-05 回答
windows自带的计算器就有这个功能,如果你要程序代码的话我手头没有现成的。