#include <stdio.h>
#include <stdlib.h>
int myStrlen(char s[]) {
int i;
for (i = 0; s[i] != '\0'; i++);
return i;
}
// 回文を生成する関数
char *setPalindrome(char s[]) {
int size = myStrlen(s);
char *tmp
= (char *)malloc(sizeof(char) * (2 * size
+ 1)); if (tmp == NULL) {
return NULL; // malloc失敗時の対応
}
int i;
for (i = 0; i < size; i++) {
tmp[i] = s[i]; // 前半:元の文字列
}
for (i = 0; i < size; i++) {
tmp[i + size] = s[size - i - 1]; // 後半:逆順
}
tmp[2 * size] = '\0'; // 終端文字
return tmp;
}
int main() {
char nyuryoku[1024]; // 入力
char *kaibun; // 回文を受け取る
kaibun = setPalindrome(nyuryoku);
printf("%s\n -> %s\n", nyuryoku
, kaibun
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBteVN0cmxlbihjaGFyIHNbXSkgewogICAgaW50IGk7CiAgICBmb3IgKGkgPSAwOyBzW2ldICE9ICdcMCc7IGkrKyk7CiAgICByZXR1cm4gaTsKfQoKLy8g5Zue5paH44KS55Sf5oiQ44GZ44KL6Zai5pWwCmNoYXIgKnNldFBhbGluZHJvbWUoY2hhciBzW10pIHsKICAgIGludCBzaXplID0gbXlTdHJsZW4ocyk7CiAgICBjaGFyICp0bXAgPSAoY2hhciAqKW1hbGxvYyhzaXplb2YoY2hhcikgKiAoMiAqIHNpemUgKyAxKSk7CiAgICBpZiAodG1wID09IE5VTEwpIHsKICAgICAgICByZXR1cm4gTlVMTDsgLy8gbWFsbG9j5aSx5pWX5pmC44Gu5a++5b+cCiAgICB9CgogICAgaW50IGk7CiAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgdG1wW2ldID0gc1tpXTsgIC8vIOWJjeWNiu+8muWFg+OBruaWh+Wtl+WIlwogICAgfQogICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgIHRtcFtpICsgc2l6ZV0gPSBzW3NpemUgLSBpIC0gMV07ICAvLyDlvozljYrvvJrpgIbpoIYKICAgIH0KCiAgICB0bXBbMiAqIHNpemVdID0gJ1wwJzsgLy8g57WC56uv5paH5a2XCiAgICByZXR1cm4gdG1wOwp9CgppbnQgbWFpbigpIHsKICAgIGNoYXIgbnl1cnlva3VbMTAyNF07IC8vIOWFpeWKmwogICAgY2hhciAqa2FpYnVuOyAgICAgICAgLy8g5Zue5paH44KS5Y+X44GR5Y+W44KLCiAgICBzY2FuZigiJXMiLCBueXVyeW9rdSk7CiAgICBrYWlidW4gPSBzZXRQYWxpbmRyb21lKG55dXJ5b2t1KTsKICAgIHByaW50ZigiJXNcbiAgLT4gJXNcbiIsIG55dXJ5b2t1LCBrYWlidW4pOwogICAgZnJlZShrYWlidW4pOwogICAgcmV0dXJuIDA7Cn0K