デジタルフリップ
//codeforces.com/problemset/problem/514/Aます:http:オリジナルタイトルリンク
[タイトル]説明を
あなたに番号を与え、あなたはこの数字を何度も操作することができ、各操作あなたはこの数aを選択することができますTの数、tは9-Tに変換されます。
22,27,72,77:例えば、27はあなたを与える、あなたが複数回操作する。この図は、(もちろん、操作の数が0であってもよい)を含む後に得られた数値を変換することができます。
あなたは、あなたが最小変換結果が得られるための番号を見つける必要があります。(実施例77の場合、結果は、最小数は22で得ることができます)。
[入力形式は、
番号(1 <= A <=入力 10 ^ 18)。
[]出力形式の
出力は、最小値を表す数値は、変換の結果であり得ます。
注意:変換結果が0で始めることはできません。これは、ビットは最も高い番号9であれば、あなたが変換を揃えることができないことを意味します。
サンプル入力[1]〜
27
[出力1]試料
22
[2]サンプル入力
4545
[2]サンプル出力
4444
タイトル解析
次いで-by-1上記の数値tのそれぞれの分析、T> = 5であれば、ビットのデジタル変換は、9-Tです。
最上位ビットは数9である場合、アラインメントは変換できません。この場合、アナログ文字列が非常に容易になります。
次のようにコードは次のとおりです。
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 const int型MAXN = 100010; ボイド転送(チャー&C){ int型、A = C - '0'。 IF(> = 5)は、A = 9 - 。 C = '0' +。 } 文字列s。 (){int型メイン CIN >> S。 INT LEN = s.length()。 {(; iがLEN <I ++はiが0 = INT)のために (私はSを&& [I] < '9' || iがSを&& [I]> = '5'!)場合転送(S [i])と; } COUT << S << ENDL。 0を返します。 }