【PAT甲级题解记录】1024 Palindromic Number (25 分)
前言
Problem:1024 Palindromic Number (25 分)
Tags:字符串
Difficulty:剧情模式
想流点汗想流点血死而无憾Address:1024 Palindromic Number (25 分)
问题描述
简单的字符串处理
解题思路
关键俩个点:
- 最多要加100次,注意数据范围并不是简单的乘以100,而是 2 100 2^{100} 2100 ,所以long long不行需要string进行大整数加法。
- 注意输入即是回文的情况,这种情况就直接输出N和0即可。
参考代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
string N;
int K;
string rev(string s) {
reverse(s.begin(), s.end());
return s;
}
string op(string s1) {
string ans = "";
string s2 = rev(s1);
int len = s1.size();
int pre = 0;
for (int i = 0; i < len; i++) {
int a = s1[i] - '0';
int b = s2[i] - '0';
int sum = a + b + pre;
if (sum >= 10) {
sum -= 10;
pre = 1;
} else {
pre = 0;
}
ans = ans + to_string(sum);
}
if (pre) {
ans = ans + "1";
}
reverse(ans.begin(), ans.end());
return ans;
}
bool check(string s) {
string t = rev(s);
return s == t ? true : false;
}
void solution_1024() {
cin >> N >> K;
if (check(N)) {
cout << N << endl << 0 << endl;
return;
}
for (int i = 1; i <= K; ++i) {
N = op(N);
if (check(N) || i == K) {
cout << N << endl << i << endl;
return;
}
}
}
int main() {
solution_1024();
return 0;
}