タイトル説明
(最初のゼロなし)数は、左から右に、すべて同じを読んで左に右に読めば、私たちは回文それを呼び出します。
例えば、10進数56、56プラス56(すなわち、右から左へ56リード)121を与えるためには、パリンドロームであるが与えられます。
別の例として10進数87の場合:
STEP1:87 + 78 = 165 STEP2:165 + 561 = 726
1353 + 3531 = 4884:STEP3:STEP4 + 627 = 1353 726
ここでN進加算のステップを参照して、実施例4のステップは、最小パリンドローム4884を得ました。
短いパリンドロームを得ることができるシーク少なくともした後、プログラム、所与N(2 <= N <= 10、N = 16)進数Mを書き込みます。もしステップ30で回文以内に取得することができません(Aを備えるステップ30)、出力「インポッシブル!」
説明を入力します。
二行、すなわちN、M.
出力説明:
STEPの=のANS(ANSは答えを表します)
例1
エントリー
9
87
輸出
= 6つのSTEP
アイデア:このタイトルの質問は、問題に直面し、それは英語が中国の背後に感嘆符である必要があり不可能ではありません。
また主題はまた、はっきりと文字がABCDを資産計上される進算術演算を言わなかった...
他には問題はないはず、私がここに書かれている主にN進演算の数が多いです。
1の#include <iostreamの>
2の#include <cstdioを>
3の#include <cmath>
4の#include <CStringの>
5の#include <アルゴリズム>
6の#include <地図>
7の#include < 設定 >
8の#include <ベクトル>
9# <キュー>含む
10の#include <リスト>
11の#include <スタック>
12 // の#include <unordered_map>
13 使用 名前空間STDを、
14 の#defineっ長い長い
15 のconst int型 MOD = 1E9 + 7 。
const int型 INF = 1E9 + 7 。
17
18地図< INT、CHAR > 融点;
19地図< チャー、INT > MP1。
20
21インライン列和(文字列、文字列 B、int型の N)// 大数加法、N进制
22 {
23 ながら(a.size()< b.size())
24 a.insert(0、" 0 " );
25 一方(b.size()<a.size())
26 b.insert(0、" 0 " )。
27 文字列 ANS = "" ;
28 int型 jinwei = 0 、合計、湯。
29 のために(int型 I = a.size() - 1 ; I> = 0 ; i-- )
30 {
31 合計= MP1 + [I] B] [[I] + MP1 jinwei。
32 jinwei =和/ N。
33 ゆう和%= Nと、
34の ANS + = 融点[ゆう]。
35 }
36 もし(jinwei)
37の ANS + = 融点[jinwei]。
38 逆(ans.begin()、ans.end())。
39の リターンANS;
40 }
41
42インラインブール裁判官(文字列STR)
43 {
44 列 T = STR。
45 逆(t.begin()、t.end())。
46 であれば(T == STR)を
47 リターン 真。
48 リターン はfalse ;
49 }
50
51 のint main()の
52 {
53 (:: sync_with_stdio IOSの偽の); cin.tie(0); cout.tie(0 );
54である // 16進数、プロセス運転マップを通報
55 のためには、(INT I = 0 ;私は= < 16。 ++ I)// 数字
56であり 、{
57は、 IF(I <= 9 )
58 MPは、[I]は=(' 0 ' + ; I)
59 他
60 MP [I]が(= ' ' + I- 10 );
61であります }
62は、63であります
用(チャー iは= ' 0 ' ;私は= < 'を9 ' iは++); // 字符对数字
64 MP1 [i]は=(I- ' 0 ' )。
65 のための(char型 I = ' A ' ; iは= < ' Gを' ; iは++ )
66 MP1 [I] = 10 + I- ' A ' 。
67
68 int型N。
69 文字列strの、STR1。
70
71 ながら(CIN >> N >>STR)
72 {
73 int型の CNT = 0 。
74 一方(CNT <= 30 )
75 {
76 であれば(裁判官(STR))
77 {
78 COUT << " STEP = " 。
79 coutの<< CNT << てendl;
80 ブレーク;
81 }
82
83 CNT ++ 。
84
85 = STR1のSTR、
86 リバース(str1.begin()、str1.end());
87 STR = SUM(STR、STR1、N); // 多数の付加、N進
88 }
89
90 IF(CNT> 30 )
91は、 COUT << " !インポッシブル" << ;てendl
92 }
93
94 リターン 0 ;
95 }