3.2w+
社区成员
题目:对于正整数 �n, 如果存在正整数 �k 使得 �=1+2+3+⋯+�=�(�+1)2n=1+2+3+⋯+k=2k(k+1), 则 �n 称为三角数。例如, 66066 是一个三角数, 因为 66066=1+2+3+⋯+36366066=1+2+3+⋯+363 。
如果一个整数从左到右读出所有数位上的数字, 与从右到左读出所有数位 上的数字是一样的, 则称这个数为回文数。例如, 66066 是一个回文数, 8778 也是一个回文数。
如果一个整数 �n 既是三角数又是回文数, 我们称它为三角回文数。例如 66066 是三角回文数。
请问, 第一个大于 20220514 的三角回文数是多少?
思路:先确定k,可以乱尝试一下,第一个满足k*(k+1)>20220514的数,然后依次判断,找到第一个满足回文数的输出。
解题代码:
#include <iostream>
using namespace std;
bool check(string s)
{
int l=0,r=s.size()-1;
while(l<r)
{
if(s[l++]!=s[r--]) return false;
}
return true;
}
int main()
{
int k;
int num=0;
for(k=6500;;k++)
{
num=k*(k+1)/2;
//cout<<num<<endl;
if(num>20220514)
{
if(check(to_string(num)))
{
cout<<num<<endl;
return 0;
}
}
}
return 0;
}