PAT (Basic Level) 1079 延迟的回文数

题意

数字串+反转数字串得到新数字串为一次操作,问能不能在10次以内找到回文串。

思路

大数加法,注意初始串就要判一次是不是回文串。

代码

#include <bits/stdc++.h>
using namespace std;
int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	string s;
	cin >> s;
	auto check = [](string init) {
		string rev = init;
		reverse(rev.begin(), rev.end());
		return (rev == init);
	};
	if (check(s)) {
		cout << s << " is a palindromic number.\n";
		exit(0);
	}
	bool flag = false;
	for (int i = 0; i < 10 && !flag; ++i) {
		string s1 = s, s2 = s;
		reverse(s2.begin(), s2.end());
		auto cal_sum = [](string a, string b) {
			vector<int> sum;
			for (int i = 0; i < a.size(); ++i)  
				sum.push_back(a[i] - '0' + b[i] - '0');
			for (int i = 0; i < sum.size(); ++i) {
				int add = sum[i] / 10;
				sum[i] %= 10;
				if (!add) continue;
				if (i + 1 < sum.size()) 
					sum[i + 1] += add;
				else 
					sum.push_back(add);
			}
			string res = "";
			for (auto e : sum) res += (e + '0');
			while(res.back() == '0') res.pop_back();
			reverse(res.begin(), res.end());
			return res;
		};
		string sum = cal_sum(s1, s2);
		cout << s1 << " + " << s2 << " = " << sum << '\n';
		flag = check(sum);
		s = sum;
	}
	if (!flag) 
		cout << "Not found in 10 iterations.\n";
	else 
		cout << s << " is a palindromic number.\n";
	return 0;
} 

HINT

不定时更新更多题解,Basic Level 全部AC代码,详见 link ! ! !

发布了92 篇原创文章 · 获赞 16 · 访问量 3760

猜你喜欢

转载自blog.csdn.net/abcdefbrhdb/article/details/104641610