【1024 25 模拟】 Palindromic Number
传送门
题意
给定数字 \(n,k\),每次将数字 \(n\) 和 \(n\) 反转后的数字相加,在 \(k\) 步内能够使结果变为回文数字就输出回文数和步数,不能就将 \(k\) 步用完后输出
数据范围
\(1\leq n\leq 10^{10}\)
\(1\leq k\leq 100\)
题解
- 极限情况下\(100\)次每次都进位则为 \(10^{1000}\) 会爆
long long - 大整数加法需要考虑进位的情况
Code
#include <bits/stdc++.h>
using namespace std;
string add(string a, string b) {
int in = 0, i = 0;
string res = "";
for (i = a.size() - 1; i >= 0; i--) {
int x = (a[i] - '0') + (b[i] - '0') + in;
res += x % 10 + '0';
in = x / 10;
}
if (in) res += '1';
reverse(res.begin(), res.end());
return res;
}
int main() {
string n; int k; cin >> n >> k;
int step = 0;
while (step < k) {
string t = n;
reverse(t.begin(), t.end());
if (n == t) break;
n = add(n, t);
step++;
}
cout << n << endl << step;
}

浙公网安备 33010602011771号