题目: 数学上有一个猜想叫作反序猜想,首先选择任意一个正整数 n,按照如下步骤进行操作: ①求出 n的反序数 m。 ②计算出 n+m的值。 ③将计算出的 n+m的值重新赋值给 n。 ④判断 n是否是回文数,若是则结束,否则重复步骤①-④。 在经过有限次数后, n最终会变成一个回文数,现在小T希望你帮他证明这个猜想,给你一个正整数 n,请你帮小T验证猜想是否成立。 反序数:对于一个正整数 k,将其从低位到高位重新组织成一个新的数字 m,称m为k的反序数。例如 132 k=132,则其反序数 231 m=231 回文数:对于一个正整数 k,若其反序数 m=k,则称 k为回文数。例如 232, k=232,则其反序数 232, m=232, k=m,所以 k是回文数。
输入:第一行—个正整数 n。
输出:第—行两个用空格隔开的正整数,分别表示执行的次数和最终的回文数值,如果猜想不成立,则输出 − 1
#include<bits/stdc++.h>
using namespace std;
int hw(int n){
int js=0;
while(n!=0){
js++;
n/=10;
}
return js;
}
int hww(int n){
int j=hw(n);
int y=0;int a;
while(n>0){
a=n%10;
n=n/10;
y=y*10+a;
}
return y;
}
int main(){
int n,js;
cin>>n;
do{
js++;
n=n+hww(n);
}while(n!=hww(n));
cout<<js<<" "<<n;
return 0;
}