パリンドローム(+進演算処理多数)

回文

タイトル説明

(最初のゼロなし)数は、左から右に、すべて同じを読んで左に右に読めば、私たちは回文それを呼び出します。

例えば、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地図< INTCHAR > 融点;
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 }

 

 

おすすめ

転載: www.cnblogs.com/xwl3109377858/p/11330601.html