悬关求调
  • 板块学术版
  • 楼主XLoffy
  • 当前回复8
  • 已保存回复9
  • 发布时间2023/10/28 22:11
  • 上次更新2023/11/2 10:59:43
查看原帖
悬关求调
1015779
XLoffy楼主2023/10/28 22:11

题目描述

回文数的定义为:如果把一个数的各个数位上的数字颠倒过来得到的新数与原数相等,则此数是回文数。7,22,131,2112,31013,…7,22,131,2112,31013,… 都是回文数。对任意给出的一个整数n,经过一系列的处理,最后都能成为回文数。处理的方法是,该数加上它的颠倒数,

例如: n=176n=176

第一次处理后 176+671=847176+671=847

第二次处理后 847+748=1595847+748=1595

第三次处理后 1595+5951=75461595+5951=7546

第四次处理后 7546+6457=140037546+6457=14003

第五次处理后 14003+30041=4404414003+30041=44044

此时成为回文数,共进行 55 次处理。

给出 nn 后,求出使该数按照以上规则进行一系列处理后成为回文数的最少操作次数。

输入描述

一个整数 n(1≤n≤1000000)n (1≤n≤1000000)。

输出描述

使 nn 成为回文数的最少处理次数。若开始给出的 nn 是回文数,则输出 00(即不需任何处理)。

用例输入 1

67

用例输出 1

2

用例输入 2

111

用例输出 2

0

本人代码:

#include<bits/stdc++.h>
using namespace std;
int t=0;
bool hw(int x)
{
    unsigned i=x,y=0;
    while(i>0)
    {
        y=y*10+i%10;
        i/=10;
    }
    return y==x;
}
int r(int m) 
{
    int ans=0;
    while(m!=0) 
	{
        ans=ans*10+m%10;
        m/=10;
    }
    return ans;
}
int f(int a)
{
    cout<<a<<" "<<t<<endl;
	if(hw(a)) return t;
    t++;
    return f(a+r(a));
}
int main()
{
	int n;
	cin>>n;
	cout<<f(n);
	return 0;
} 

hack数据:1254812548

期待输出:1414

实际输出:6969

求大佬帮助

2023/10/28 22:11
加载中...