十进制转二进制的一种实现
来源:互联网 发布:加密软件破译 编辑:程序博客网 时间:2024/06/15 13:38
/*Binary Digit Translation*//*这个程序用于十进制数字到二进制数字的转换,使用的是字符串和数字的互相转化,具体使用规格说明如下:Type of Number: unsigned long 32bitsType of Strings: char *s[13]Cycle variable:unsigned int i,t*/
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>char bin[33]="00000000000000000000000000000000";int isnumerical(char *s)/*用于判断是否为数字的函数,0-非数字,1-数字*/{ unsigned int i,flag=1;/*flag为数字类型标识*/ if ((s[0]!='-')&&(s[0]<'0'||s[0]>'9')) flag=0;/*非数字*/ else { if (s[0]=='-') flag=1;/*负数*/ for (i=1;i<strlen(s);i++)/*从第二个字符开始验证是否为数字*/ if (s[i]<'0'||s[i]>'9') { flag=0; break; } } return flag;}void lowcase(char *s)/*将非数字的字符串统一转换成小写*/{ unsigned int i; for (i=0;i<strlen(s);i++) if (s[i]>='A'&&s[i]<='Z') s[i]+=32;}unsigned long e(unsigned int times)/*这个函数用来返回10^times*/{ unsigned int i; unsigned long num=1; if (times==0) return 1; else for (i=0;i<times;i++) num*=10; return num;}long val(char *s)/*这个函数实现字符串到数字的转换,返回数字部分,负数返回数字部分*/{ unsigned int i,len=strlen(s); long num=0; if (s[0]!='-')/*正数*/ for (i=0;i<len;i++) num+=(s[i]-'0')*e(len-i-1); else /*负数*/ { for(i=1;i<len;i++) num+=(s[i]-'0')*e(len-i-1); num=-num; } return num;}char *D_B(long val) /*十进制转换成二进制,val-value*/{ char c;/*bin[]前32位为二进制,最后一位为'/0'*/ unsigned int i=0,t=0,len,ad=1;/*ad-进位*/ if (val==0) return bin; if (val>0)/*正数*/ { while (val!=0) { bin[i++]=val%2+'0'; val/=2; } //bin[i]='/0'; len=i-1;/*len下脚标恢复到'/0'之前的位置*/ for (i=0,t=len;i<t;i++,t--) { c=bin[i]; bin[i]=bin[t]; bin[t]=c; }/*交换二进制字符串使得从0-len为正确的顺序*/ /*把数字部分移动到数组尾部*/ for (i=0;i<len+1;i++) { c=bin[31-i]; bin[31-i]=bin[len-i]; bin[len-i]=c; } } else /*负数*/ { /*负数部分还存在问题*/ bin[0]='1';/*负数为最高位为1,其他位为正数二进制取反加1*/ i=1;/*转换的数字要从第二个字符串开始*/ val=abs(val); while (val!=0) { bin[i++]=val%2+'0'; val/=2; } len=i-1;/*len下脚标恢复到'/0'之前的位置*/ for (i=1,t=len;i<t;i++,t--) { c=bin[i]; bin[i]=bin[t]; bin[t]=c; }/*交换二进制字符串使得从0-len为正确的顺序*/ /*把数字部分移动到数组尾部*/ for (i=0;i<len;i++) { c=bin[31-i]; bin[31-i]=bin[len-i]; bin[len-i]=c; } /*按位取反*/ for (i=1;i<32;i++) { if (bin[i]=='0') bin[i]='1'; else bin[i]='0'; } /*再加一*/ for (i=31;ad!=0;i--) { if (bin[i]+ad>'1') bin[i]='0';/*需要进位*/ else { bin[i]='1';/*前面有进位,此时可以推出s[i]=='0'*/ ad=0; } } }/*else 结束*/ return bin;}main(){ char s[14]; puts("This program is made for translate Decimal Digit to Binary Digit."); puts("/"Exit/" for exit."); putchar('/n'); puts("ATTENTION:"); puts("The number rangement:-2147483647~2147483647/n"); while (1) { printf(">>"); gets(s); if (isnumerical(s))/*s是数字*/ { putchar('/n'); printf("Binary Digit:"); puts(D_B(val(s))); putchar('/n'); } else { lowcase(s); if (strcmp(s,"exit")!=0) { puts("/nInvalid input."); puts("Only /"exit/" can exit this program./n"); } else break; } strcpy(bin,"00000000000000000000000000000000"); }}
- 十进制转二进制的一种实现
- 十进制转二进制的实现(实验3.3)
- Stack实现十进制转二进制
- 递归实现十进制转二进制
- 栈实现二进制转十进制
- 递归实现十进制转二进制
- 二进制转十进制(栈实现)
- 堆栈实现二进制转十进制
- 利用堆栈实现的十进制转二进制程序实现
- 十进制数转二进制数的C实现代码
- 十进制整数转二进制的各种实现和思考
- 利用栈的操作实现二进制转十进制
- js-栈的使用- 利用数组实现十进制转二进制
- 十进制转二进制的算法
- 二进制转十进制的程序
- 小数的十进制转二进制
- 负数的十进制转二进制
- 把十进制转化为二进制的一种方法
- 安装Ubuntu 9.10(hd0)
- 当前各大企业云计算的发展形式之其他
- C语言中输出函数任意参数的实现
- hello world
- 插入排序(单链表)
- 十进制转二进制的一种实现
- android实现结束进程。
- Oracle Profile 使用详解
- 纯C写的windows下贪吃蛇,BUG检查中。。。(2010.6.7更新)
- 分页和非分页内存
- C语言随感进行时(不定时更新)
- tag 搜索
- AutoCompleteBox学习
- Qt 4.6.2+Dev Cpp