算法思想:把用户的二进制数(1011)当作十进制进行处理,分别拆开成1 0 1 1四个数,然后用
2*(2*((1*2)+0)+1)+1 = 11 得出十进制的值为11
模块设计:
- 除10取余函数:1011通过%10(除10取余),可得到1 1 0 1(逆序)
- 计算十进制:循环处
程序代码:
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { while(1) { printf("enter num:"); int a; scanf("%d",&a); int b[20]; int i=0; while(a)//二进制数拆分 { b[i]=a%10; a=a/10; i++; } int j; for(j=0;j<i;j++)//输出拆分结果,是否符合预期(逆序) { printf("%d\n",b[j]); if(b[j]!=0&&b[j]!=1) { printf("error\n"); return 0; } } int c=0; int k; for(k=i-1;k>=0;k--)//计算十进制 { if(k==0) c=c+b[k]; else c=(c+b[k])*2; } printf("c=%d\n",c); } return 0; }