问题:

题目描述

将一个二进制数,转换为对应的十进制数。

输入

输入第一行为一个数n,表示二进制数的位数。

第二行有高位到低位依次输入二进制数的每一位数。

输出

输出一个整数,为该二进制数对应的十进制数。

样例输入

12
1 0 0 0 0 0 0 0 0 0 0 1

样例输出

2049

代码实现:

#include <iostream>
using namespace std;
#include<vector>
int main() {
    int n;
    cin>>n;
    vector<int>arr;
    for(int i=0;i<n;i++)
    {
        int temp;
        cin>>temp;
        arr.push_back(temp);
    }
    int result=arr[arr.size()-1];
    int two=2;
    for(int i=arr.size()-2;i>=0;i--)
    {
        result=result+two*arr[i];
        two=two*2;
    }
    cout<<result<<endl;
}

效果:

分析:

主要就是使用:

假设输入的一列式子为:an,an-1,……a2,a1;

转化之后的十进制数为y;

y=2的0次方*a1+2的1次方*a2+……2的n-1次方*an;

注意,我们这里不能用pow,因为pow一般是处理浮点数的,这里用“可能会出问题”!

我们是先设置一个变量two,然后内部循环的时候,从后往前,逐渐x2,就达到了2的阶乘的效果!

更多推荐