解题思路:
1.设输入的数为number=12;
2.求其对应二进制数的算法为:
12 /2 =6......(0);
6 /2 =3......(0);
3 /2 =1......(1);
1 /2 =0......(1);
当每次除以2得到新的number,当number==0时结束;
余数从下向上为:1 1 0 0就是该整数对应的二进制数;
注意事项:
该方法仅仅针对整数部分的二进制数;小数部分方法不同;
按题目条件输出;
参考代码:
#include <stdio.h> #include <math.h> void bina( int number ); void output( int *A, int number, int n ); int jinzhi = 2; /*----------------------------------------*/ int main() { int number; while ( scanf( "%d", &number ) != EOF ) bina( number ); return(0); } /*----------------------------------------*/ void bina( int number ) { int t = fabs( number );//取绝对值,方便计算以及输出 int i = 0; int A[10000];//存放二进制数 do { A[i] = t % jinzhi; t /= jinzhi; i++; }while ( t != 0 ); output( A, number, i ); return; } /*----------------------------------------*/ void output( int *A, int number, int n ) { printf( "%d-->", number );//输出10进制数 if ( number < 0 ) //输出二进制数负号 printf( "-" ); for ( int i = n - 1; i >= 0; i-- ) printf( "%d", A[i] ); printf( "\n" ); //换行 return; }
别忘点赞哦-.-
0.0分
14 人评分
#include <stdio.h> int DtoB(int n){ int x=1,y,sum=0; while(n!=0){ y=n%2; sum+=x*y; x*=10; n/=2; } return sum; } int main(){ int sm10,sm2; while(~scanf("%d",&sm10)){ sm2=DtoB(sm10); printf("%d-->%d\n",sm10,sm2); } return 0; } 能帮我看看哪儿错了吗谢谢大佬
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:643 |
简单编码 (C++代码)浏览:720 |
【绝对值排序】 (C++代码)浏览:712 |
回文数(一) (C语言代码)浏览:801 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:1295 |
printf基础练习2 (C语言代码)浏览:685 |
1124题解浏览:618 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:584 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:748 |
WU-C语言程序设计教程(第三版)课后习题12.3 (C++代码)浏览:918 |