Solución al problema número 1688A de Codeforces - 1688A.

Cualquier duda no dudes en contactar.


#include <bits/stdc++.h>
using namespace std;
 
string bin(long long int n){
    long long int  i;
    string res = "0";
    for (i = 1 << 30; i > 0; i = i / 2){
        if((n & i) != 0) res+="1";
        else res+="0";
    }
    return res;
}
int main(){
    int cases; scanf("%d",&cases);
    while(cases--){
        long long int number; scanf("%lld",&number);
        string num = bin(number);
        //cout<<num<<endl;
        string res = "";
        int unos=0;
        for(int i=0; i<num.length();i++){
            if(num[i]=='1') unos++;
        }
        if(unos==1){
            for(int i=num.length()-1; i>=0;i--){
                if(num[i]=='0') {
                    num[i] = '1';
                    break;
                }
            }
        }
        else{
            bool flag = false;
            for(int i=num.length()-1; i>=0;i--){
                if(flag) num[i]='0';
                if(num[i]=='1') {
                    flag=true;
                }
            }
        }
        cout<<stoi(num, 0, 2)<<endl;
    }
    return 0;
}

No te pierdas nada.

Sigue en contacto con Isaac Lozano Osorio!