azarasi / AcWing 4201. 01数

Created Sat, 25 Dec 2021 21:22:38 +0800 Modified Wed, 18 Sep 2024 14:00:22 +0000

如果一个正整数,其各个数位上的数字均满足要么是 0,要么是 1,则称该数字为 01 数。

例如,1 和 10 都是 01 数。

给定一个整数 n。

请你计算,1∼n 中有多少个 01 数。

输入格式

一行,一个整数 n。

输出格式

一个整数,表示 01 数的数量。

数据范围

前六个测试点满足 1≤n≤100。

所有测试点满足 1≤n≤109。

输入样例:

10

输出样例:

2
#include<iostream>
#include<cmath>
#include<vector>

using namespace std;

int main(){
    int number;
    cin>>number;
    int copy = number;
    int len = 0;
    while (copy != 0) {
        copy /= 10;
        len++;
    }
    vector<int> arr = vector<int>(len);
    copy = number;
    for (int i = len - 1; i >= 0; i--) {
        arr[i] = copy % 10;
        copy /= 10;
    }

    int sum = static_cast<int>(pow(2, len));
    for (int i = 0; i < len; i++) {
        if (arr[i] > 1) {
            break;
        } else if (arr[i] == 0) {
            sum -= static_cast<int>(pow(2, len - i - 1));
        }
    }
    sum--;
    cout<< sum;
    return 0;
}