题目
已知一个只包含0和1的二进制数,二进制数的长度不大于10。你的任务是将其转换为十进制数并打印出来。
提示:用除法和求余运算每次从右到左获取二进制整数的各位数字。在十进制数值系统中,最右边的数字是个位,个位的左边依次是十位、百位、千位等等。与之类似,在二进制数值系统中,最右边的数字是1位,左边的数字依次为2位、4位、8位等等。十进制数234可分解为4*100+3*101+2*102,二进制数1101可分解为1*20+0*21+1*22+1*23,它等价于十进制数1+0+4+8,即13。
输入格式:
为一个只包含0和1的整数n(长度不超过10位),代表二进制数。
输出格式:
为转换得到的十进制数。
输入样例:
11111
输出样例:
在这里给出相应的输出。例如:
31
解题过程
这题与我的上一篇博文L2-1 加密数-CSDN博客有异曲同工之妙,都是将2进制转为10进制,而我想获取各个位置上的数字这个操作大家已经很熟悉了,那么同样的只需要获取各个位上的数字后与2做幂运算再相加就可以得到10进制数了
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main()
{
int n,sum,N;
while (scanf("%d", &n) != EOF) {
N = n;
int s = 0;
int j = 0;
do {
if (N % 10 == 1)
s = s + pow(2, j);
N = N / 10;
j++;
} while (N != 0);
printf("%d\n", s);
}
return 0;
}