【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;	
}
posted @ 2021-02-15 22:04  Hyx'  阅读(76)  评论(0)    收藏  举报