<思路>

把输入的二进制数按照从低到高的次序依次输出,且每一次都乘以相应的位权

//(所谓位权数中每一固定位置对应的单位值称为位权。例如十进制第一位位权为0,第2位的位权为10,第3位的位权为100;而二进制第一位位权为0,第2位的位权为2,第3位的位权为4,第四位位权为8;对于 N进数,整数部分第 i位的位权为N^(i-1),而小数部分第j位的位权为N^-j。


举个例子:【将二进制数1101转化成十进制数】

1101=1*2的零次幂+0*2的一次幂+1*2的二次幂+1*2的三次幂

注:从最低位开始计算(最右边计算最低位),依次往左边的高位计算再累加。


①首先完成从低到高的次序输出:即每一次输出都应该从二进制数的最低位(最右边的数输出)

方法是:n%10;

②每一次都乘以相对应的位权:由于二进制的位权是以二次幂往上增加,所以每一次都应该将所求得的最后一位乘以对应的位权2;

③由于是从低位到高位依次输出该二进制数n,所以数字应该往前移动

方法是:n/10;

看下面的程序吧!

#include<stdio.h>
void main()
{   int n,sum=0,p=1          //n为二进制数,sum为每一位计算所加的和,p为位权
    scanf("%d",&n);          //输入该二进制数
    while(n)               //循环条件为n,即二进制数n在不为0的时候程序一直成立
     { sum+=(n%10)*p;       //数字中所有位乘以本位的位权再加和
       p*=2;                //位权随着位的变化依次增加
       n/=10; }             //进行下一位的输出

printf("%d\n",sum);

}

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐