十进制转换为二进制数需要利用除k取余法,其中有循环和递归二中算法,下面看一下代码:
递归版:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> //将一个十进制的数转换成一个二进制的数 void chu_k(int a,char str[],int &last) { int k = 0; int m = 0; int i = 0; if(a <= 1) { last = a;//保留此时的余数 return; } else { m = a % 2; str[last++] = m + '0'; chu_k(a/2,str,last); } } int main() { int a = 123; int length = 0; char str[20] = {0}; int last = 0; chu_k(a,str,last); length = strlen(str); str[length] = last + '0'; length = strlen(str)-1; int i = length; for(;i>=0;i--) { printf("%c",str[i]); } return 0; }
打印:1111011
在参数传值的时候是传整型数还是传字符串取决于传哪种更方便,最后在根据需要对整型和字符串之间相互转换,chu_k函数是先打印余数在递归,所有最后打印出来的一个逆序的,最后要把结果倒叙输出才是正确的。
循环版:
int main() { int c[32] = {0}; int i = 0; int n = 123; do { c[i++] = n%2; n /= 2; }while(n != 0); i = i - 1; for(;i>=0;i--) { printf("%d",c[i]); } return 0; }
循环版用的是整型数组,比用字符串数组略简单,而且循环比递归更容易理解,看起来更简单。
看下二进制转十进制:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> //将一个十进制的数转换成一个二进制的数 void func(char str[],int &result) { int length = strlen(str); int i = length-1; int m = 0; for(;i >=0;i--) { if(str[i]) { m = m + pow(2,length-i-1) * (str[i] - '0'); } } result = m; } int main() { int result = 0; char str[]="1111011"; func(str,result); printf("last=%d\n",result); return 0; }
打印:123
这个还需要大家细读二进制转十进制的数学方法,程序也是按照数学方法写的。
注意这张图中1010对应字符串来说是逆序的