十进制转换为二进制数需要利用除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对应字符串来说是逆序的