• Quasi Binary


    A number is called quasibinary if its decimal representation contains only digits 0 or 1. For example, numbers 0, 1, 101, 110011 — are quasibinary and numbers 2, 12, 900 are not.

    You are given a positive integer n. Represent it as a sum of minimum number of quasibinary numbers.

    Input

    The first line contains a single integer n (1 ≤ n ≤ 106).

    Output

    In the first line print a single integer k — the minimum number of numbers in the representation of number n as a sum of quasibinary numbers.

    In the second line print k numbers — the elements of the sum. All these numbers should be quasibinary according to the definition above, their sum should equal n. Do not have to print the leading zeroes in the numbers. The order of numbers doesn't matter. If there are multiple possible representations, you are allowed to print any of them.

    Examples
    input
    Copy
    9
    output
    Copy
    9
    1 1 1 1 1 1 1 1 1
    input
    Copy
    32
    output
    Copy
    3
    10 11 11

     用string做很简单

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <string>
    #include <set>
    #include <queue>
    #include <map>
    #include <sstream>
    #include <cstdio>
    #include <cstring>
    #include <numeric>
    #include <cmath>
    #include <unordered_set>
    #include <unordered_map>
    //#include <xfunctional>
    #define ll long long
    #define mod 998244353
    using namespace std;
    int dir[4][2] = { {0,1},{0,-1},{-1,0},{1,0} };
    const long long INF = 0x7f7f7f7f7f7f7f7f;
    const int inf = 0x3f3f3f3f;
    
    int main()
    {
        string n,t="",res;
        vector<string> ans;
        cin >> n;
        for (int i = 0; i < n.size(); i++)
            t += '0';
        while (n != t)
        {
            res = "";
            for (int i = 0; i < n.size(); i++)
            {
                if (n[i] == '0')
                {
                    res += '0';
                }
                else
                {
                    res += '1';
                    n[i]--;
                }
            }
            for (int i = 0; res[i] == '0'; i++)
            {
                res.erase(i, 1);
                i--;
            }
            ans.push_back(res);
        }
        cout << ans.size() << endl;
        for (int i = 0; i < ans.size(); i++)
            cout << ans[i] << " ";
        return 0;
    }
  • 相关阅读:
    Autofs
    markdown 基本语法
    Why Linux Doesn’t Need Defragmenting
    How to reconfigure installed dpkg package (tzdata, locales)
    weblogic性能监控
    exec
    在Oracle中查询表的大小
    hadoop主要概念的理解和学习
    ORACLE ASM中查询表空间使用情况、数据文件路径、裸设备磁盘总大小剩余大小
    linux 查看内存和cpu占用比较多的进程
  • 原文地址:https://www.cnblogs.com/dealer/p/12381504.html
Copyright © 2020-2023  润新知