题目描述:将二进制数转化为十进制数;
输入格式:
第一行一个正整数?n? (1≤n≤30),表示二进制数的长度。
第二行一个二进制数。
输出格式:
输出一个整数,表示对应的十进制数。
思考:对于进制之间的互相转化,应该首先清楚何为二进制,二进制是只用0和1排列组合表示数? ? ? ? ? ? ? 值?的计数方法,同十进制类似;其次对于二进制转化为十进制,整数二进制是用每一位上? ? ? ? ? ? ? 的数值乘以2的幂次再依次相加 ,小数二进制则是用每一位上的数值乘以2的负幂次再依次? ? ? ? ? ? ? 相加
? ? ? ?(1)定义数组,并完成输入,其中要用getchar()排除换行符;
int n,s=0;
char a[30];
int i;
scanf("%d",&n);
getchar();
? ? ? (2)利用for语句完成二进制的输入,并判断如何进行进制转换(为1和为0时),最后输出累? ? ? ? ? ? ? ? ?加结果
for(i=0;i<n;i++){
scanf("%c",&a[i]);
}
for(i=0;i<n;i++){
if(a[i]=='1'){
s+=pow(2,n-i-1);
}else{
s+=0;
}
}
printf("%d",s);
完整代码:
#include<stdio.h>
#include<math.h>
int main(void)
{
int n,s=0;
char a[30];
int i;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++){
scanf("%c",&a[i]);
}
for(i=0;i<n;i++){
if(a[i]=='1'){
s+=pow(2,n-i-1);
}else{
s+=0;
}
}
printf("%d",s);
return 0;
}
注:进制转换时用到了数学次方函数pow,不要忘记在头文件中声明哦!
#include<math.h>
|