寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

Aizu Online Judge in C++ #Volume0 - 0031 : Weight

Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。

・問題 "Weight"
https://onlinejudge.u-aizu.ac.jp/problems/0031
⇓問題概要
input
複数のデータセットが与えられます。各データセットに、左の皿に載せる品物の重さが1行に与えられます。入力の最後まで処理して下さい。データセットの数は 50 を超えません。

output
各データセットに対して、右の皿に載せる分銅(昇順)を1つの空白で区切って、1行に出力して下さい。
また、10 個の分銅の重さは、軽い順に 1g, 2g, 4g, 8g, 16g, 32g, 64g, 128g, 256g, 512g です。

僕が作成、提出したコードは、以下のとおりです。

・Aizu Online Judge in C++ #Volume0 - 0031 : Weight
/*
Aizu Online Judge in C++ #Volume0 - 0031 : Weight
 https://onlinejudge.u-aizu.ac.jp/problems/0031
 提出コードの解答例
 https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll n;
    while(cin>>n){
        for(ll i=1;n>0;i*=2,n/=2){
            if(n%2){
                cout<<i<<(n>1 ? " " : "\n");
            }
        }
    }
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/