Nhờ xem giúp code phân tích số nguyên n thành các tổng các luỹ thừa 2 phân biệt

Được biết một số nguyên N luôn có thể phân tích thành tổng các lũy thừa của 2 sao cho mỗi số
chỉ xuất hiện một lần. Cho một số nguyên N, bạn hãy in ra một cách phân tích đó.

Dữ liệu
• Một số nguyên dương N.

Kết quả
• In ra các số lũy thừa của 2 khác nhau sao cho tổng của chúng bằng N, in ra theo thứ tự tăng dần.

Giới hạn
• 1 ≤ N ≤ 10^9.

Ví dụ

Sample Input Sample Output
6 2 4

CODE CỦA MK:

#include <bits/stdc++.h>

using namespace std;
int n;

int main()
{
    cin>>n;
    int d=0;
    while(n>0)
    {

        if(n%2!=0)
        cout<<(n%2)*pow(2,d)<<" ";
        d++;
        n=n/2;
    }
    return 0;
}

Code minh đã ổn chx vậy

Hint: chuyển 6 về hệ nhị phân, ta có: 6_{10} = 110_2 = 10_2 + 100_2 = 2_{10} + 4_{10}

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?