[PAT]クラス1024回文数(25点)

質問の意味:

入力する2つの正の整数N及びK(N <= 1E10、K <= 100)、K及びN、パリンドローム、出力数と操作の最小数のN倍可用性の、反対側の否定和。

トリック:

1E10デジタル合計は限り長く、文字操作のアレイの使用、ならびにコードのコメントに遭遇するいくつかのマイナーな問題が破裂する、100 1e40到達することができます。

コード:

HAVE_STRUCT_TIMESPECの#define
の#include <ビット/ STDC ++ H.>
使用して名前空間std;
CHAR NUM [107];
CHAR S [107]; //ここでは、文字列の上に直接見出さ小さな時間の文字列情報にアクセスして以下の問題が発生割り当ては、その長さを増大させることができない元の長さの後に、文字列の長さの形でS + =「xxx」は、増加させることができるお勧めします。
K int型、
int型のmain(){
CIN >> S >> K;
INT TOT = K;
フラグ= 0のint、
int型SIZ = STRLEN(S);
一方、(K - ){
memsetの(NUM、0、はsizeof(NUM ));
int型CNT = 0;
のための(INT I = -SIZ 1; I> = 0; - I)
NUM [CNT ++] =のS [I];
フラグ= 0;
。ため(INT I = 1; I <= CNT / 2; I ++)は
NUMは(NUM [I]は= [Iは-CNTを+ 1])IF {!
フラグに= 1;
BREAK;
}
()フラグにIF {!
= 2フラグに、
BREAK;
}
文字列Y ;
int型Jinwei = 0;
以下のために(INT I = CNT; I; - I){
int型のTT = NUM [I] + S [-I 1] - '0' - '0' + Jinwei;
Y [I] = 10%+ TT「0 ';
Jinwei = TT / 10;
}
IF(Jinwei)
Y [0] =' 1「;
(!Y [0] = 0)IF
のための(INT I = 0;私は= CNTを<; Iは++)
S [ I] = Yは、[I];
それ以外
については、(int型I = 1;私は= CNT <;私は++)
S [-I 1] = Y [I]は、。
IF(!S [CNT] = 0)
SIZ = CNT +1; SIZは、文字列s //エラーを使用する場合に発生する可能性がセグメント長Sを更新するためにここで使用される
他の
SIZ = CNTを、使用時s.sizeあろう長さのSIZを更新しない場合はここで、//文字列s( )更新されていない、まだSサイズ()は、実際には()のサイズを理解していない入力である- 1つの位置sの割り当ての後に、そのサイズを更新することはできません()、ミスがSIZ更新で発生する
}
ため(I = 0 int型; IはSIZを<; I ++)は
COUT << S [I];
COUT << ENDL;
IF(フラグに== 2)
COUT << - TOT-K 1;
他の
COUT << TOT、
リターン0;
}

おすすめ

転載: www.cnblogs.com/ldudxy/p/11442958.html