
零的零次方
-建筑材料学报
2023年2月16日发(作者:大学班级工作总结)⼆进制转⼗进制算法
2021年10⽉30号是本⼈第⼀次写csdn,通过这个平台学习到了许多知识,正所谓⼈⼈为我,我为⼈⼈,今天来和⼤家来分享⼀下c
语⾔的⼆进制转⼗进制的算法!
⼆进制由两个数(0与1)构成的,如1001、1000、1100、1110、1111等等,他们所对应的⼗进制的数字是9、8、12、14、
15。那么是怎么计算的呢??我们以1001来说明,1001是由4个数字组成的,⽽⼆进制是从右往左数,从0开始数,我们看图!
我们计算的⽅式呢!是看哪个位置上有1开始计算(计算的顺序是从右往左开始),如图0对应的1与3对应的1就是我们要计算的,那
么图上的0对应1,那么就是2的零次⽅、对应3的就是2的三次⽅,2的零次⽅等于1,2的三次⽅就等于8,然后进⾏相加就是1+8=9!
1111、1010都是如此!
那么我们知道⼆进制转换10进制的原理了,我们就可以通过次⽅法来解决c语⾔的进制转换问题!如图:
#include
#include
intmain(){
chara[10];/*不超过10个数字的⼆进制!!*/
intc=0,sum=0,m;
printf("输⼊⼀串⼆进制数0或者1!");
gets(a);/*gets表⽰输⼊⼀个字符到数组*/
intb=strlen(a);/*定义⼀个变量b,来存放数组的长度(strlen是来计算数组的元素)!*/
for(inti=0;i
m=1;/*定义⼀个m的变量是来累乘的⼀个定值1;*/
if(a[i]=='1'){/*这⾥做⼀个判断!数组⾥如果有是1的元素,
我们就把他取出来计算,等于0则不管!*/
for(intj=1;j<=b-i-1;j++)/*j<=b-i-1,(算法的核⼼)由i的变化⽽去控制b-1的范围!b-1是因为⼆进制是从0开始算的,
j是从1开始的,所以要减去⼀个1,以上是控制累乘的次数,如果是2的三次⽅。
就循环3次(2*2*2),此时得出2的三次⽅等于8,如果循环退出,
则m的值返回初始的值1,不进⾏累乘,然后sum加1!*/
m*=2;
sum+=m;
}
}
printf("%d",sum);
return0;
}
如有不⾜之处还请指正!
谢谢⼤家!