题目描述:
给定一个整数 n,从右往左读得到它的反数 m,请你判断 n 与 m 的和 s 是否是一个回文数。
回文数是从左往右读和从右往左读结果一样的整数。
若 s 不是一个回文数,则继续判断 s 和它的反数的和是否是一个回文数。
重复这一过程,直至达到和为一个回文数为止。
例如,如果 n 为 195,则 m 为 591,s 为 786;再经过以下计算 786+687=1473;1473+3741=5214;5214+4125=9339。
在达到回文数 9339 之前总共进行了 4 次加法操作。
对于 n,要求计算出达到回文数之前所进行的加法操作的最小次数和最终达到的回文数。
保证 n 本身不是一个回文数。
保证对于 n 来说一定能在 1000 次加法操作之前达到回文数,并且在计算过程中的和一定小于 2✖️10的9次方。
输入格式
一个整数 n。
输出格式
共一行,两个整数,表示最小加法次数及最终达到的回文数。
数据范围
1≤n≤10000
输入样例:
195
输出样例:
4 9339
开始解题:
思路:该题目是一道经典的模拟题,按照题目模拟算法即可.
#include <bits/stdc++.h>
using namespace std;
// 让数字反转
int reverseNum(int num) {
int res=0;
while (num > 0) {
int temp = num % 10;
res = res * 10 + temp;
num /= 10;
}
return res;
}
int main() {
int n;
cin >> n;
// 统计操作的次数
int count = 0;
// 最多循环1000次,如果提前达到结果就退出
for (int i = 1;i <= 1000;i++) {
if (n != reverseNum(n)) {
n += reverseNum(n);
count++;
}
else {
break;
}
}
cout << count << " " << n << endl;
return 0;
}