查找给定输入-n的最小二进制小数。

Ind*_*uja 2 binary decimal

如果数字中的所有数字均应为“ 1”或“ 0”,则该数字称为二进制十进制。任何数字都可以写成二进制小数的总和。我们的任务是找到表示数字的最小二进制小数。

输入 :32 输出:10 11 11

输入 :120 输出:10110

有什么有效的解决方案?

Vig*_* Rk 5

举个例子

54321答案是

11111

11110

11100

11000

10000

因此将其视为am * n矩阵,其中m是给定数字中数字的最大值,n是数字位数。然后用等于1的数字的值填充1的列,并用0休息。

        #include<iostream>

        using namespace std;
        int max(int arr[],int c)
        {
            int max=arr[0];
            for(int i=1;i<c;i++){
                if(arr[i]>max){
                    max=arr[i];
                }
            }
            return max;
        }
        int main() {
            int n,x,c=0,i=0,j=0;
            cin>>n;
            x=n;
            while(n!=0){
                n=n/10;
                c++;
            }
            int *a=new int[c];

            while(x!=0){
                a[i]=x%10;
                x=x/10;
                i++;
            }
            int r=max(a,c);
            int ans[r][c];
            for(int i=0;i<c;i++)
            {
                for(int j=0;j<r;j++)
                {
                    if(a[c-i-1]!=0){
                        ans[j][i]=1;
                        a[c-i-1]--;
                    }
                    else
                        ans[j][i]=0;
                }
            }
            for(i=0;i<r;i++){
                for(j=0;j<c;j++){
                    cout<<ans[i][j];
                }
                cout<<"\n";
            }

            }
Run Code Online (Sandbox Code Playgroud)